今天讲的内容有
一、叠加多个装饰器
二、迭代器
三、自定义迭代器
四、xxx生成式
一、叠加多个装饰器
当一个被装饰的对象同时叠加多个装饰器时
被装饰的加载顺序是:至下而上
装饰器内wrapper函数的执行顺序是:至上而下
二、迭代器
1.什么叫做迭代器
迭代指的是一个重复的过程,每一次重复都是基于上一次的结果而来的,迭代器是取值的 的工具,除去索引取值之外比较通用的一种取值方式,。
2.为何要用迭代器
对索引取值的一种补充,可以不依赖于索引的取值方式
3.如何用迭代器
可迭代的对象:当中自带__iter__内置功能的类型
迭代器的对象:即自带__iter__又带__next__内置功能的类型
可迭代对象:str、list、tuple、dict、set、文件
迭代器对象:文件对象
4.总结迭代器的优缺点:
优点:通用的一种取值方式,可以不通过依赖索引的取值方式
同一时刻在内存中只有一个值,更加节省内存
缺点:取值时不如索引取值灵活
无法预知迭代器数据的个数
如何实现可迭代到迭代器的转换:
1.调用可迭代对象的__iter__会得到一个迭代器对象
2.调用迭代器对象的__iter__会得到一个迭代器本身
迭代器对象:调用可迭代对象内置的__iter__方法会有一个返回值,该返回值就是对 应的迭代器对象
5.for准确来说应该是迭代器循环,for循环原理如下:
1.先调用in后面的那个值的__iter__方法,得到迭代器对象
2.执行迭代器__next__()方法得到一个返回值,然后赋值给一变量K,运行循环体代码
3.循环往复,知道迭代器取值完毕抛出异常然后捕捉异常自动结束循环
三、自定义迭代器
1.yleid关键字:
#只能在函数内,但凡包含关键字yleid,再去执行函数,就不会立刻运行函数体代码了,
#会得到一个返回值,该返回值成了生成器对象,生成器本质就是迭代器
2.yleid关键字总结:
1.yleid可用于返回值
2.yield vs return
相同点:返回函数的一个值
不同点:return返回值一次就终止,而yield返回值多次
四、xxx生成式
1.三元表达式:
x=10
y=20
res='条件成立值’ if x>y else ‘条件不成立值’
print(res)
2.列表生成式:
l=['egg%s' %i for i in raage(1,11) if i>4]
print(i)
3.生成器表达式:
res=(i**2 for i in range(3))
print(res)
print(next(res))
print(next(res))
print(next(res))
print(next(res))
4.字典生成式
items=[('name','egon'),('age',18),('sex','male')]
res={k:v for k,v in items if k!='sex'}