Python生成器简介

Python012

Python生成器简介,第1张

Python 中的 yield 关键字鲜为人知,但是作用却很大,正是因为有了yield,才有了Python生成器

yield 是 Python 的关键字,它用于 从函数返回而不破坏其局部变量的状态 ,并且在调用该函数时,从最后一个 yield 语句开始执行。任何包含 yield 关键字的函数都称为生成器。

Python 中的 yield 关键字的作用类似于 Python 中的 return 语句,不同之处在于:

yield的优点

yield的缺点

Python 可以使用 括号() 创建生成器

更多时候,我们使用 yield 关键字创建生成器

下面这个生成器,前4次调用它时,返回的是0-3这几个特殊值,第5次调用它时返回一个10-20之间的随机整数。

更多时候,生成器可以返回无限的值。

注意 generator() 函数返回的是一个生成器对象,要想获取它的值,可以像上面那样在迭代器中取出它的值,我们也可以显式的调用next函数获取值。

Python | yield Keyword - GeeksforGeeks:https://www.geeksforgeeks.org/python-yield-keyword/

https://c.runoob.com/compile/9/

什么是Python Generator(生成器)

Python Generator(生成器)用于在内存资源有限的情况下,把处理大数据的任务,分解为一段一段可以管理和处理的数据块(chunk),建立起数据流(data pipeline),从而一步一步的解决完大数据任务的技术。例如,假设有500G的数据待处理,内存只有32G,我们可以把数据分为200M的数据块,然后借助Python Generator技术,实现一边加载数据一边进行数据处理的效果。

生成器关键字yield 与 函数返回语句return的区别

return语句 终止函数运行并返回return语句后面的变量值;return语句后面的语句不执行。

Python生成器可以由以下两种方式创建:

当python中的生成器被完整遍历一次后,就无法再次遍历。

我们希望享有生成器迭代占用内存小的特性,又希望这个生成器能被遍历多次。

方案之一是使用函数 itertools.tee 来复制生成器

语法: generator1, generator2 = itertools.tee(generator, n=2)

generator是需要复制的生成器, n是复制出生成器个数,默认为2。

我们为了生成器能多次遍历,可以这样写:

generator, copy_generator = itertools.tee(generator, 2)

然后遍历copy_generator,保存的generator可以再次复制。

1、generator被复制后尽量不要使用

2、如果生成器中迭代的还是生成器,复制最外层生成器,生成器依然只能遍历一次。

下一篇

python生成器多次遍历(二)------创建生成器类