Lazy loaded image
解释器、迭代器、装饰器
Words 1101Read Time 3 min
2024-10-28
解释器
迭代器
装饰器
 

迭代器,生成器和装饰器

应用优势
迭代器:迭代器可以实现了iternext 两个方法,具有状态记录的功能,可以节省内存;
生成器:代替列表浪费空间且低效,生成器一边循环一边计算的机制;
装饰器:装饰器本质上还是一个函数,它可以让已有的函数不做任何改动的情况下增加功能(权限校验,日志记录和性能测试)。剥离出大量与函数功能本身无关的代码,增加了代码的重用性。
 
 

1. 可迭代对象和迭代器

 
生成器,迭代器和可迭代对象的关系
生成器,迭代器和可迭代对象的关系

迭代器简单使用

for循环本质上是使用迭代器

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

itertools 库提供了很多常见迭代器

2. 生成器(Generator)

创建生成器

  1. 改造列表生成式
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 的名字。
 
  1. python 黑科技之迭代器、生成器、装饰器
 
上一篇
模板设计模式:让你的代码结构更清晰
下一篇
Guide to Linux System

Comments
Loading...