带 yield 的函数 是一个生成器,生成器的返回是一个列表,可用于迭代。有一个 next() 方法用于执行生成器。
1、yield 是一个类似 return 的关键字,迭代一次遇到 yield 时就返回 yield 后面的值。重点是:下一次迭代时,从上一次迭代遇到的 yield 后面的代码开始执行。
2、生成器 (generator) 能够迭代的关键是它有一个 next() 方法,工作原理就是通过重复调用 next() 方法,直到捕获一个异常。可以用上面的 mygenerator 测试。
比如,常见的 fab 序列,用生成器写:
def fab(max):
a, b, n = 0, 1,0
while n < max:
yield b
a, b = b, a + b
n += 1
next(fab(5))
for i in fab(5):
print(i)
当执行 next(fab(5)) 的时候,就生成了一个列表 [1,1,2,3,5]
然后 for 循环列表,打印出内容。
另一个应用,pytest 中执行 teardown。如下的代码中
1、当每个用例执行前会执行 setup 方法
2、执行到 yield 时就执行用例的内容
3、完成后再执行 teardown 的内容。
@pytest.fixture()
def setup(self):
print('setup')
yield
print('teardown')
参考 wiki:https://blog.csdn.net/mieleizhi0522/article/details/82142856