11 列表推导式和生成器表达式的优劣
列表推导式是 1 次构造列表中的所有结果;
生成器表达式不是 1 次构造出所有结果,对内存占用相对较小。
对于非常大的结果集合的计算,生成器表达式要优于列表推导式。
参考文献:
- 《Python 学习手册(第 4 版)》 - 第 20 章 - 生成器表达式:迭代器遇到列表解析 - P506,P507。
10 生成器(生成器表达式、生成器函数、生成器对象)
这里暂时仅介绍生成器函数。
yield:yield item
这行代码会产生 1 个值,提供给 next(...)
的调用方;此外,还会暂停执行生成器,让调用方继续工作,直到需要使用另一个值时,再调用 next()
。调用方会从生成器中拉取值。
(《流畅的 Python》 - P381)
生成器函数:带有 yield 语句的函数。
生成器函数在生成值的时刻挂起,并保存状态;当函数恢复时,可以继续执行。
>>> def f():
print('hello')
yield 1
print('i am')
yield 2
print('henry')
>>> g = f()
>>> g.__next__()
hello
1
>>> g.__next__()
i am
2
>>> g.__next__()
henry
Traceback (