测试基础 python yield 的应用

tongyuruo · 2020年01月15日 · 最后由 cheunghr 回复于 2020年01月16日 · 1625 次阅读

带 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

共收到 2 条回复 时间 点赞

生成器生成的是一个可迭代对象,列表、元组等都是可迭代对象
调用 yield 的时候,会自动的纪录当前的位置,下次调用的时候会取下一个值

杨辉三角

def triangles(n):
    l = [1]
    current = 0
    while current < n:
        yield l
        if len(l) == 1:
            l.append(1)
        else:
            l2 = deepcopy(l)
            for i in range(current):
                l[i+1] = l2[i] + l2[i+1]
            l.append(1)
        current += 1
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册