Python 生成器
在这个教程里,你会学习如何轻松使用python生成器创建迭代,迭代器和常规函数的不同,以及为什么使用它
Python中的生成器
在python中构建迭代器有很大工作我们必须使用__iter__()
和__next__()
方法实现一个类,追踪内部状态,并在没有值返回时抛出StopIteration异常
这既冗长又违反直觉。生成器在此时就有用了。
Python生成器是创建迭代器的简单方法。偶们上边提到的所有工作其实都是Python的生成器自动处理的。
简而言之,生成器就是一个函数,它返回一个对象(迭代器),我们可以对其进行迭代(一次一个值)
用Python创建生成器
使用Python创建生成器是非常简单的。就像定义普通函数一样简单,但是它使用的是yield语句而不是return.
如果一个函数至少有一个yield语句(他可能包含其它yield语句或return语句),那么它就是生成器函数。yield和return都将从函数返回一些值。
不同之处在于,return语句是完全终止函数,而yield语句只是暂停,之后会继续执行。
生成器函数和普通函数的区别
- 生成器函数包含一个或多个
yield
语句 - 调用时,他返回一个对象(迭代器),但不会立即开始执行
- 诸如
__iter__()
和__next__()
之类的方法是自动实现的。因此可以遍历所有项目使用next()
- 一旦执行yield,函数会暂停执行调用的方法
- 连续调用直接会记住局部变量和他们的状态
- 最后,函数终止时,在进一步的调用中将自动引发
StopIteration异常
在下面的例子中,我们说明了上边的要点。这是一个叫做my_gen()
的生成器函数,其中包含多个yield
语句
In [1]:
# 简单的生成器函数
def my_gen():
n = 1
print("this is printed first")
# 生成器函数包含的yield
yield n
n += 1
print("this is printed second")
yield