返回顶部
首页 > 资讯 > 后端开发 > Python >python 学习笔记 7 -- Pyt
  • 734
分享到

python 学习笔记 7 -- Pyt

学习笔记pythonPyt 2023-01-31 00:01:59 734人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

学习一门语言最重要的功课是练习与复习,在《笨方法学python》中第三十七节虽然没有教你任何内容,但是它提醒我们:“学了这么多,你还能记得多少?该复习了!”下面我们就对这一节的第一部分“关键字”来做个复习:Python中的关键字包括如下:a

学习一门语言最重要的功课是练习与复习,在《笨方法学python》中第三十七节虽然没有教你任何内容,但是它提醒我们:“学了这么多,你还能记得多少?该复习了!”

下面我们就对这一节的第一部分“关键字”来做个复习:

Python中的关键字包括如下:

and       del        from      not      while    as        elif       global    or       with       assert    else       if        pass     yield   break     except     import    print    class     exec       in        raise    continue  finally    is        return   def       for        lambda    try

你想看看有哪些关键字?OK,打开一个终端,就像这样~

long@zhouyl:~$ python
Python 2.7.3 (default, Jan  2 2013, 16:53:07) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more infORMation.
>>> import keyWord
>>> keyword.kwlist
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> 

============================== 华丽的 正文分隔符 ========================================

看到这些关键字你还能记得多少?你不妨自己一个一个对照想想它的用法,下面是我总结的,我根据前面的学习笔记将上述关键字分为以下几类:

对于Python的循环及判断主要包括这些关键字:

if    elif    else        for    while    break    continue    and    or       is       not          in        

这几个关键字在前面介绍 if 语法、while语法、for语法以及and...or语法中已有介绍,下面再一笔带过:

1.1 if 语法

if语法与C语言shell脚本之下的非常类似,最大的区别就是冒号以及严格的缩进,当然这两点也是Python区别于其他语言的地方:

if  condition1:                                

        do something

elif  condition2:

        do another thing

else:

        also do something 


1.2 while  语法

Python的while语法区别于C、shell下的while除了冒号及缩进之外,还有一点就是while可以携带一个可选的else语句:

while condition:

        do something

else:

        do something

注:else语句是可选的,但是使用while语句时一定要注意判断语句可以跳出!


1.3 for 语法

与while类似,Python的for循环也包括一个可选的else语句(跳出for循环时执行,但是如果是从break语句跳出则不执行else语句块中的代码!),而且for 加上 关键字in就组成了最常见的列表解析用法(以后会写个专门的博客)。

下面是for的一般用法:

for  i in range(1,10,2):

        do something

        if  condition:

              break

else:

       do something 

for的列表解析用法:

for items in list: 

      print items


1.4 and...or 语法

Python的and/or操作与其他语言不同的是它的返回值是参与判断的两个值之一,所以我们可以通过这个特性来实现Python下的 a ? b : c !

有C语言基础的知道 “ a ? b : c ! ” 语法是判断 a,如果正确则执行b,否则执行 c!

而Python下我们可以这么用:“ a and b or c ”(此方法中必须保证b必须是True值),python自左向右执行此句,先判断a and b :如果a是True值,a and b语句仍需要执行b,而此时b是True值!所以a and b的值是b,而此时a and b or c就变成了b or c,因b是True值,所以b or c的结果也是b;如果a是False值,a and b语句的结果就是a,此时 a and b or c就转化为a or c,因为此时a是 False值,所以不管c是True 还是Flase,a or c的结果就是c!!!捋通逻辑的话,a and b or c 是不是就是Python下的a ? b : c ! 用法?


1.5 is ,not

is 和 is not 是Python下判断同一性的关键字,通常用来判断 是 True 、False或者None(Python下的NULL)!

比如  if alue is True : ...

(不记得本节的童鞋罚复习:python 学习笔记 2 -- 判断语句)



对于Python的函数及模块主要包括这些关键字:

from     import       as            def            pass      lambda      return      class   

那么你还能记得它们么?下面简单介绍一下:


2.1 模块

Python的编程通常大量使用标准库中的模块,使用方法就是使用import 、from以及as 关键字。

比如:  import sys  # 导入sys模块

             from sys import argv   # 从sys模块中导入argv ,这个在前面介绍脚本传参数时使用到

             import cPickle as p     # 将cPickle模块导入并在此将它简单命名为p,此后直接可以使用p替代cPickle模块原名,这个在介绍文件输入输出时的存储器中使用到


2.2 函数

Python中定义函数时使用到def关键字,如果你当前不想写入真实的函数操作,可以使用pass关键字指代不做任何操作:

def  JustAFunction:

        pass

当然,在需要给函数返回值时就用到了return关键字,这里简单提一下Python下的函数返回值可以是多个(接收返回值时用相应数量的变量接收!)!

此外Python下有个神奇的Lambda函数,它允许你定义单行的最小函数,这是从Lisp中借用来的,可以用在任何需要函数的地方。比如:

g = lambda x : x*2   # 定义一个Lambda函数用来计算参数的2倍并返回!

print g(2)                 # 使用时使用lambda函数返回的变量作为这个函数的函数名,括号中带入相应参数即可!

(不记得本节的童鞋罚复习:python 学习笔记 4 -- 函数篇)



对于Python的异常主要包括这些关键字:

 try   except     finally     raise        

异常这一节还是比较简单的,将可能出现的异常放在 try: 后面的语句块中,使用except关键字捕获一定的异常并在接下来的语句块中做相应操作,而finally中接的是无论出现什么异常总在执行最后做finally: 后面的语句块(比如关闭文件等必要的操作!)

raise关键字是在一定的情况下引发异常,通常结合自定义的异常类型使用。

(不记得本节的童鞋罚复习:python 学习笔记 6 -- 异常处理)



上面的三类过后,还剩下这些关键字:


print      del            global        with       assert           yield       exec        

首先print 在前面的笔记或者任何地方你都能见到,所以还是比较熟悉的,此处就不多介绍了!

del 关键字在前面的笔记中已有所涉及,比如删除列表中的某项,我们使用 “ del mylist[0] ”

可能这些剩下来的关键字你比较陌生,所以下面来介绍一下:


4.1.global 关键字

当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。

eg.

  1. #!/usr/bin/python  

  2. # Filename: func_local.py  

  3.   

  4. def func(x):  

  5.     print 'x is', x  

  6.     x = 2  

  7.     print 'Changed local x to', x  

  8.   

  9. x = 50  

  10. func(x)  

  11. print 'x is still', x  



运行的结果是这样的:

  1. $ python func_local.py  

  2. x is 50                     # 运行func函数时,先打印x的值,此时带的值是作为参数带入的外部定义的50,所以能正常打印 x=50   

  3. Changed local x to 2        # 在func函数中将x赋2,并打印  

  4. x is still 50               # 运行完func函数,打印x的值,此时x的值仍然是之前赋给的50,而不是func函数中修改过的2,因为在函数中修改的只是函数内的局部变量  


那么为什么我们要在这提到局部变量呢?bin
Go,聪明的你一下就猜到这个global就是用来定义全局变量的。也就是说如果你想要为一个在函数外定义的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
eg.

  1. #!/usr/bin/python  

  2. # Filename: func_global.py  

  3.   

  4. def func():  

  5.     global x  

  6.     print 'x is', x  

  7.     x = 2  

  8.     print 'Changed local x to', x  

  9.   

  10. x = 50  

  11. func()  

  12. print 'Value of x is', x  



运行的结果是这样的:

  1. $ python func_global.py  

  2. x is 50  

  3. Changed global x to 2  

  4. Value of x is 2             # global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。  


你可以使用同一个global语句指定多个全局变量。例如global x, y, z。


4.2.with 关键字      

有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。
如果不用with语句,打开一个文件并读文件的代码如下:

  1. file = open("/tmp/foo.txt")  

  2. data = file.read()  

  3. file.close()  


当然这样直接打开有两个问题:一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是添加上异常处理的版本:

  1. file = open("/tmp/foo.txt")  

  2. try:  

  3.     data = file.read()  

  4. finally:  

  5.     file.close()  


虽然这段代码运行良好,但是太冗余了。这时候就是with一展身手的时候了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是with版本的代码:

  1. with open("/tmp/foo.txt") as file:  

  2.     data = file.read()  


这看起来充满魔法,但不仅仅是魔法,Python对with的处理还很聪明。基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。


with语句的执行逻辑如下:紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。


下面例子可以具体说明with如何工作:

  1. #!/usr/bin/python  

  2. # with_example01.py  

  3.    

  4. class Sample:  

  5.     def __enter__(self):  

  6.         print "In __enter__()"  

  7.         return "Foo"  

  8.    

  9.     def __exit__(self, type, value, trace):  

  10.         print "In __exit__()"  

  11.    

  12. def get_sample():  

  13.     return Sample()  

  14.    

  15. with get_sample() as sample:  

  16.     print "sample:", sample  


运行代码,输出如下

  1. $python with_example01.py     

  2. In __enter__()           # __enter__()方法被执行  

  3. sample: Foo              # __enter__()方法返回的值 - 这个例子中是"Foo",赋值给变量'sample',执行代码块,打印变量"sample"的值为 "Foo"  

  4. In __exit__()            # __exit__()方法被调用  




4.3.assert 关键字          

assert语句是一种插入调试断点到程序的一种便捷的方式。assert语句用来声明某个条件是真的,当assert语句失败的时候,会引发一AssertionError,所以结合try...except我们就可以处理这样的异常。
eg. 
>>> mylist         # 此时mylist是有三个元素的列表
['a', 'b', 'c']
>>> assert len(mylist) is not None  # 用assert判断列表不为空,正确无返回
>>> assert len(mylist) is  None     # 用assert判断列表为空
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module>
AssertionError                      # 引发AssertionError异常


4.4.yield 关键字       

我们先看一个示例:

  1. def fab(max):   

  2.    n, a, b = 0, 0, 1   

  3.    while n < max:   

  4.        yield b   

  5.        # print b   

  6.        a, b = b, a + b   

  7.        n = n + 1   

  8. ''  


使用这个函数:

  1. >>> for n in fab(5):   

  2. ...     print n   

  3. ...   

  4. 1   

  5. 1   

  6. 2   

  7. 3   

  8. 5  


简单地讲,yield 的作用就是把一个函数变成一个 generator(生成器),带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable(可迭代的)对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
也可以手动调用 fab(5) 的 next() 方法(因为 fab(5) 是一个 generator 对象,该对象具有 next() 方法),这样我们就可以更清楚地看到 fab 的执行流程:
 >>> f = fab(5)   

  1.  >>> f.next()   

  2.  1   

  3.  >>> f.next()   

  4.  1   

  5.  >>> f.next()   

  6.  2   

  7.  >>> f.next()   

  8.  3   

  9.  >>> f.next()   

  10.  5   

  11.  >>> f.next()   

  12.  Traceback (most recent call last):   

  13.   File "<stdin>", line 1, in <module>   

  14.  StopIteration  


当函数执行结束时,generator 自动抛出 StopIteration 异常,表示迭代完成。在 for 循环里,无需处理 StopIteration 异常,循环会正常结束。



我们可以得出以下结论:
        一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。 


注:如果看完此段你还未明白yield,没问题,因为yield是初学者的一个难点,那么你下一步需要做的就是……看一看下面参考资料中给的关于yield的博文!


4.5.exec 关键字     

官方文档对于exec的解释: "This statement supports dynamic execution of Python code."也就是说使用exec可以动态执行Python代码(也可以是文件)。

  1. >>> longer = "print \"Hello World ,my name is longer\""     # 比如说我们定义了一个字符串  

  2. >>> longer  

  3. 'print "Hello World ,my name is longer"'  

  4. >>> exec(longer)                                            # 使用exec 动态执行字符串中的代码  

  5. Hello World ,my name is longer  

  6. >>> exec(sayhi)                                             # 使用exec直接打开文件名(指定sayhi,sayhi.py以及"sayhi.py"都会报一定的错,但是我觉得直接带sayhi报错非常典型)  

  7. Traceback (most recent call last):  

  8.   File "<stdin>", line 1, in <module>  

  9. TypeError: exec: arg 1 must be a string, file, or code object   # python IDE报错,提示exec的第一个参  

  10. 数必须是一个字符串、文件或者一个代码对象  

  11. >>> f = file("sayhi.py")                                    # 使用file打开sayhi.py并创建f实例  

  12. >>> exec(f)                     # 使用exec直接运行文件描述符f,运行正常!!  

  13. Hi, this is [''] script  


上述给的例子比较简单,注意例子中exec语句的用法和eval_r(), execfile()是不一样的. exec是一个关键字(要不然我怎么会在这里介绍呢~~~), 而eval_r()和execfile()则是内建函数。更多关于exec的使用请详看引用资料或者Google之。


================================================

global 参考:《Python简明教程》第七章 函数 - 局部函数

assert 参考:Http://www.idefs.com/studying-python-knowledge-assert.html

with 参考:http://python.42qu.com/11155501   

yield 参考:https://pyzh.readthedocs.org/en/latest/the-python-yield-keyword-explained.html 

                    http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

exec参考:http://www.mojidong.com/python/2013/05/10/python-exec-eval/


--结束END--

本文标题: python 学习笔记 7 -- Pyt

本文链接: https://lsjlt.com/news/182938.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python 学习笔记 7 -- Pyt
    学习一门语言最重要的功课是练习与复习,在《笨方法学Python》中第三十七节虽然没有教你任何内容,但是它提醒我们:“学了这么多,你还能记得多少?该复习了!”下面我们就对这一节的第一部分“关键字”来做个复习:Python中的关键字包括如下:a...
    99+
    2023-01-31
    学习笔记 python Pyt
  • python 学习笔记day10-pyt
    xinetd服务器    配置xinetd服务        什么是xinetd        xinetd可以统一管理很多服务进程,它能够:        - 绑定、侦听和接受来对自服务器每个端口的请求        - 有客户访问时,调...
    99+
    2023-01-31
    学习笔记 python pyt
  • python 学习笔记day02-pyt
    循环语句    while 循环        while 循环语法结构            当需要语句不断的重复执行时,可以使用 while 循环                while expression:            ...
    99+
    2023-01-31
    学习笔记 python pyt
  • python 学习笔记第二章:安装pyt
       记得上次写python的学习笔记是三个月以前了,期间看过,也放下过,这次要坚持下来,一鼓作气,吃下python。    本文内容主要是根据《Python 简明教程》和自己的一些理解去写的,有问题,还请指出。   一、Linux 下安装...
    99+
    2023-01-31
    第二章 学习笔记 python
  • Python学习笔记7——文本、模块
    参考书籍:《Learning_Python_5th_Edition.pdf》,一本英文书呢,我上传到百度网盘吧,请点击这里,密码是:kym3 文本文件的输入输出 Python具有基本的文本文件读写功能。Python的标准库提供有更丰富的读...
    99+
    2023-01-30
    学习笔记 模块 文本
  • python学习笔记:第7天 深浅拷贝
    目录 1. 基础数据类型补充 2. set集合 3. 深浅拷贝 1. 基础数据类型补充 (1)join方法 join方法是...
    99+
    2023-01-30
    深浅 学习笔记 python
  • Python学习笔记
    Python介绍 Python是一种解释型、面向对象的语言。 官网:www.python.org Python环境 解释器:www.python.org/downloads 运行方式: 交互模式。在IDLE中运行。 脚本模式。文件的后缀...
    99+
    2023-01-30
    学习笔记 Python
  • Python 学习笔记
    rs=Person.objects.all() all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。 print rs.query 会打印出原生sql语句 rs=Pe...
    99+
    2023-01-31
    学习笔记 Python
  • MySQL学习笔记(7):存储引擎
    本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。 目录InnoDBMyISAMMERGEMEMORYNDB常用存储引擎对比 和大多数数据库不同,插件式存储引擎是MySQL最重要的特性之一。...
    99+
    2020-04-30
    MySQL学习笔记(7):存储引擎
  • python学习笔记--趣学Python
    由反弹球和球拍构成的游戏。球会在屏幕上飞过来,玩家要用球拍把它弹回去 画布和画弹球 引入模块 #Tkinter -- Python的标准GUI库,Tk 接口,是python 内置的安装包 from tkinter import * i...
    99+
    2023-01-31
    学习笔记 python Python
  • python OpenCV学习笔记
    目录图像翻转图像轮廓排序图像轮廓排序颜色识别基础颜色识别根据BGR获取HSV阈值编辑器图像翻转 使用Python的一个包,imutils。使用下面的指令可以安装。 pip in...
    99+
    2024-04-02
  • Python学习笔记(matplotli
    Python学习笔记--在Python中如何调整颜色和样式   参靠视频:《Python数据可视化分析 matplotlib教程》链接:https://www.bilibili.com/video/av6989413/p=6 所用的库及环...
    99+
    2023-01-30
    学习笔记 Python matplotli
  • Python学习笔记(二)
    学完了基础中的基础后,我们准备深入基础中的函数、类和对象。 function函数: 正如英文单词描述的,函数就是“功能”的意思,把完成一个功能所需要的代码打包起来放在一个函数下可以方便以后程序的重复调用,也能使整体代码条理清晰。正如前...
    99+
    2023-01-30
    学习笔记 Python
  • python学习笔记(1
    关于随笔 python随笔只是个人笔记,可能会有遗漏或错误,仅供参考 学习文档地址 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e5...
    99+
    2023-01-30
    学习笔记 python
  • python-memcached学习笔记
    介绍:   memcached是免费、开源、高性能、分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态web应用程序的使用。   数据类型:只用一种字符串类型 1:安装 sudo apt-get install me...
    99+
    2023-01-31
    学习笔记 python memcached
  • Python学习笔记(2)
    Python开发IDE:pycharm   ,eclipse 快捷键:Ctrl+?整体注释 一·运算符   +(加)   -(减)  *(乘)   /(除)  **(幂)  %(余)   //(商)     判断某个东西是否在某个东西里边...
    99+
    2023-01-30
    学习笔记 Python
  • Python学习笔记-SQLSERVER
    环境 : python3.6 / win10 / vs2017 / sqlserver2017 一、需要安装的包pymssql pip install pymssql 二、pymssql模块的介绍 pymssql 包 有modules...
    99+
    2023-01-30
    学习笔记 Python SQLSERVER
  • Python学习笔记(1)
    Python开发框架:       a.Python基础;       b.网络编程;       c.WEB框架;       d.设计模式+算法;       e.项目阶段; 开发:   开发语言:       高级语言:Python...
    99+
    2023-01-30
    学习笔记 Python
  • Python学习笔记(1)
    1 def sum_args(*args): 2 return sum(args)) 3 4 def run_with_positional_args(func, *args): 5 return func(*...
    99+
    2023-01-31
    学习笔记 Python
  • Python 学习笔记 - SQLAlc
    继续上一篇SQLAlchemy的学习之旅。多对多表的创建表Host和表HostUser通过表HostToHostUser关联在一起from sqlalchemy import create_engine from sqlalchemy.ex...
    99+
    2023-01-31
    学习笔记 Python SQLAlc
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作