生成器本质
生成器是一个可迭代对象,自动实现了迭代器协议。
怎样生成生成器?
两种方法
- 函数里return改为yield
- 利用生成器表达式,将列表表达式的[]改为()即可
好处
节省内存
题外话
参考: https://www.cnblogs.com/allen2333/p/9373853.html
大部分内置函数,可以使用迭代器协议访问对象。因为生成器实现了迭代器协议,那么可以将生成器当作函数的参数。例如内置函数sum
sum(x ** 2 for x in range(0,4))
代替
# 列表表达式,立即计算结果,结果都放到列表里
sum([x ** 2 for x in range(0,4)])