yield简单介绍
yield <==> 生成器
包含yield语句的函数是一个生成器
生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值
生成器是一个不断产生值的函数
如何改变文本的样式
强调文本 强调文本
简单实例
def gen(n):
for i in range(n):
yield i**2
for i in gen(5):
print(i, ' ', end='')
生成器每调用一次在yield位置产生一个值,直到函数执行结束.
输出
0 1 4 9 16
为什么需要生成器?
实例
def gen(n):
for i in range(n):
yield i**2
def square(n):
return [j**2 for j in range(n)]
for i in gen(5):
print(i, ' ', end='')
print()
for i in square(5):
print(i, ' ', end='')
输出结果
0 1 4 9 16
0 1 4 9 16
生成器gen(n)每次只使用一个存储单元,不断的更新;
与生成器相比square(n)函数则是把所有的数都存入列表中,等待使用;
当所需的对象很多时,如n=1M,100M或更大时,很明显生成器更加节省空间。
以上为个人理解,如有误请指正
优势
生成器相比一次列出所有内容的优势:
1.更节省存储空间
2.响应更迅速
3.使用更灵活