python中try、except、finally、return、continue的执行顺序
return 函数中常见,运行该语句则直接返回值 例如:
def a(b): if b>3: retun print('dfds') in-a(5) out-none in-a(2) out-dfdacontinue—–执行到该语句,跳转到while语句重新开始循环,不执行continue下面while内的语句
else_________当不满足while语句循环条件时,执行else下面的语句。相当于if—-else; finally________无论如何循环,都会执行finally语句
try | | except else | | finallywhile True:
try: xxxxx expect: xxxxx else: xxxxx这里expect与else连用,expect是指如果出现错误则XXXX,else是指如果不出现错误则XXXX。
加入return语句后的变化,
def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return 'try' except Exception: print('process except') print('to return in except') return 'except' finally: print('to return in finally') return 'finally' test1Return = test1() print('test1Return : ' + test1Return) 输出: to do stuff process except to return in except to return in finally test1Return : finally解析:
try语句中列举异常,跳转到except语句中,except语句遇到return语句,则中断return语句,保留return返回值。继续执行finally语句,finally语句中不影响return返回值。如果在finally语句中由return则执行该return,否则,返回原return语句。
def test3(): i = 0 try: i += 1 print('i in try : %s'%i) raise Exception('hehe') except Exception: i += 1 print('i in except : %s'%i) return i finally: i += 1 print ('i in finally : %s'%i ) print('test3Return : %s'% test3()) 输出: i in try : 1 i in except : 2 i in finally : 3 test3Return : 2解析: 在except和try中遇到return时,会锁定return的值,然后跳转到finally中,如果finally中没有return语句,则finally执行完毕之后仍返回原return点,将之前锁定的值返回(即finally中的动作不影响返回值),如果finally中有return语句,则执行finally中的return语句
break——–跳出本层循环
文件操作
open(路径,打开方式)返回一个类文件对象,该对象支持iter方法,属于可迭代对象。
图片视频属于二进制文件,使用‘rb’模式阅读
python 2to3 工具使用
cd到2to3.py文件夹 -w 文件路径
LEGB变量作用域原则
local—函数内局部变量
encloseing function locals—-外部嵌套函数的名称空间
global(module):函数定义所在模块的名称空间
Builtin(python):python内置模块的名称空间
闭包
在Python中,所谓的闭包是一个包含有环境变量取值的函数对象。环境变量取值被保存在函数对象的closure属性中。
闭包在于分步赋值,将复杂函数分解。
对象属性
python中一切皆对象,只要是对象就有dict方法,该方法返回对象的属性,dict为一个词典,键为属性名,对应的值为属性本身。 object.dict[N]相当于object.(N.value)
property函数
静态方法与类方法都是类被创建时调用,静态方法是没有参数的类方法,也可以叫做类属性;而类方法的参数是类,是有参数的类方法。
类方法
object.getattr(self,name) 在访问对象访问类中不存在的成员时会自动调用;
object.setattr(self,name,value)方法用于在初始化对象成员的时候调用,即在设置dict的item时就会调用setattr方法。
Property函数 对于对象的属性来讲,涉及到的操作主要有 获取、更改、删除 三种操作。 Property函数作用:将类中的对象方法转化为对象属性。调用对象方法时要加(),调用对象属性时不用加()。 将 获取、更改、删除的属性操作方法合并到一个属性中去。
property()最多可以加载四个参数。前三个参数为函数,分别用于处理查询特性、修改特性、删除特性。最后一个参数为特性的文档,可以为一个字符串,起说明作用。
@Property 修饰器(object.getter) @object.setter @object.deleter
装饰器 以函数为参数的函数。 闭包一次——无参数装饰器 闭包两次——含有参数的装饰器
魔法方法
魔法方法影响了PYTHON的语法,魔法方法更为低层。
object.xxxx() 魔法方法都是对象的方法。很多内置的函数都调用了魔法方法。 例如: int()函数调用了int()方法; 列表中的[]调用了getitem()方法; + 调用了add()方法。 任何一个有call()特殊方法的对象都被当作是函数
生成器yield、send()、next()
yield 相当于return,是生成器标志。语句运行到这里结束,等待下一次调用(next或者send). yield 返回值与yield 表达式的值是两个意思。 例如:yield 3 是指yield 返回3,而a=yield 3,是将yield =3 这个表达式的值付给a,表达式的值可以由send赋值。 send函数的本质:给yield表达式赋值,返回yield的返回值。 next()给yield表达式赋值为None。 send()使用时,要先用send(None)或者next()进行yield 表达式的初始化,然后在进行更改表达式的值。也就是说,send函数只能改变第二个yield表达式的值。 send()实现 的是 使生成器 不仅可以根据调用次数来实现生成数据,更可以通过输入不同数据(来给yield表达式赋值的方式)来实现生成不同数据。 send()方法是先给yield 表达式赋值,在进行的迭代。所以需要先给yield表达式赋值None,在进行改变
next()是函数,参数是可迭代对象。
生成器函数调用时不会运行函数内代码,只有用next方法调用时,才会运行函数。 eg: def aaa():#正常函数 print(‘ashdfj’) in-b=aaa() out-ashdfj
def bbb():#生成器函数 print(‘aaa’) yield 5 in-b=bbb() out-None
表达式与语句是有区别的。表达式就是某些事情,而语句则是做某些事情。 例如:
a=5(赋值语句) a(调用函数表达式) 交互式解释器总是把所有表达式的值打印出来。 exec(str)——-作用是将字符串转化为PYTHON语句并执行 eval(语句)———作用是求表达式中的值 定义函数时,第一行注释也称为文档化字符串。
方法:定义在类内部,拥有self参数。调用方式:object.方法(*arg,**args) 函数:定义在类外部,无self参数。 对象:对象是属性和方法的集合 多态:对象与方法之间是多对一的关系。
保护类实例对象属性私有
检查继承的方法: 检查类与类之间父子关系 —– issubclass(类1,类2) 打印基类——————object.base 判断实例与类之间的关系———isinstance(实例,类)
文件运行时,name等于main;文件被导入时,name等于文件名称。 Python引入了一个变量name,当文件是被调用时,name的值为模块名,当文件被执行时,name为’main‘。
main.py python中有这个模块的功能未知
编码与解码 字符与字节 unicode 是计算机内存能够处理的东西
utf-8用于传输储存的中间编码。
内存——编码encode(unicode》》》UTF-8)——传输(UTF-8)——解码decode(UTF-8>>>unicode)——内存——编码储存(UTF-8)。
python3中的字符串默认为unicode,所以不能解码。