解释器
迭代器
装饰器
迭代器,生成器和装饰器1. 可迭代对象和迭代器迭代器简单使用for循环本质上是使用迭代器itertools 库提供了很多常见迭代器2. 生成器(Generator)创建生成器生成器优势3. 常规循环,迭代器和生成器完成菲波那切数列4. 装饰器带参数封装防止装饰体更改__name__属性
迭代器,生成器和装饰器
应用优势
迭代器:迭代器可以实现了iter 和 next 两个方法,具有状态记录的功能,可以节省内存;
生成器:代替列表浪费空间且低效,生成器一边循环一边计算的机制;
装饰器:装饰器本质上还是一个函数,它可以让已有的函数不做任何改动的情况下增加功能(权限校验,日志记录和性能测试)。剥离出大量与函数功能本身无关的代码,增加了代码的重用性。
1. 可迭代对象和迭代器

迭代器简单使用
for循环本质上是使用迭代器
先将可迭代对象转化为Iterator,再去迭代。应该是处于对内存的节省考虑。因为迭代器只有在你调用 next() 才会实际计算下一个值。

itertools
库提供了很多常见迭代器
2. 生成器(Generator)
创建生成器
- 改造列表生成式
2. 生成器函数
⬇️
👍 一般for来使用的,这样不用关心StopIteration的异常
生成器优势
生成器在Python中是一个非常强大的编程结构,可以用更少地中间变量
写流式代码
,此外,相比其它容器对象它更能节省内存和CPU
,当然它可以用更少的代码来实现相似的功能。3. 常规循环,迭代器和生成器完成菲波那切数列
4. 装饰器
带参数封装
使用 @use_log(level='warn') 时,会将 level 的值传给装饰器的环境中。它的效果相当于 use_log(level='warn')(foo) ,也就是一个三层的调用。
防止装饰体更改__name__属性
decorator 不会改变装饰的函数的功能,但会悄悄的改变一个 __name__ 的属性(还有其他一些元信息),因为 __name__ 是跟着函数命名走的。可以用 @functools.wraps(func) 来让装饰器仍然使用 func 的名字。