16. Python脚本学习笔记十六生成器
本篇名言:“打开你的手机,收到我的祝福,忘掉所有烦恼,你会幸福每秒,对着镜子笑笑,从此开心到老,想想明天美好,相信自己最好。”
生成器是Python新引入的概念,也叫简单生成器。
生成器和迭代器应该是Python中引入的强大特性。生成器可以帮助读者写出非常优化的代码。
1. 创建生成器任何包含yield语句的函数称为生成器。
如下:
>>>g=((i+2)**2 for i in range(2,27))
>>>g.next()
16
生成器推导式和列表推导式工作方式类似,列表推导式是用普通圆括号而不是中括号。此外,列表推导式是立即实例化一个列表,所以没有迭代的优势。
生成器由两部分组成:生成器的函数和生成器的迭代器。生成器的函数使用def语句定义的,包含yield的部分,生成器的迭代器是这个函数返回的部分。
生成器的函数返回的迭代器可以像其他的迭代器那样使用。
defsimple_generator():
yield
printsimple_generator
printsimple_generator()
输出如下:
<functionsimple_generator at 0x0245FCF0>
<generatorobject simple_generator at 0x0246B468>
2. 生成器方法
外部作用域访问生成器的send方法,像访问next方法一样。
使用send方法只有在生成器挂起之后才有意义,也就是说在在生成器挂起之后才有意义,也就是说在yield函数第一次执行之后。
如下示例:
defrepeater(value):
whileTrue:
new = (yield value)
if new isnotNone: value = new
r = repeater(42)
printr.next()
print r.send("hello,world")
输出如下:
42
hello,world