python yield 用法解释

64 阅读1分钟

yield关键字

在Python中,yield 是用于创建生成器函数的关键字。生成器函数是一种特殊的函数,可以暂停并且可以在后续时间点恢复执行。当生成器函数被调用时,它返回一个生成器对象,这个对象可以用于迭代产生函数中 yield 关键字后面的值。

yield 关键字可以在生成器函数中多次出现,每次执行到 yield 时,函数会暂停并返回一个值给调用者。当生成器再次被调用时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 或者函数结束。

这种特性使得生成器函数非常适合处理大量数据或者需要延迟计算的场景,因为它们可以逐步产生结果,而不需要一次性将所有结果保存在内存中。

def test_yield():
    print("start")
    yield 1
    print("middle")
    yield 2
    print("end")
    yield 3

y = test_yield() # 凡是带了yield的函数,都不会立即执行!!
print(y)  # <generator object test_yield at 0x100630f40>
result = next(y)  # start
print(result)  # 1
result = next(y)  # middle
print(result)  # 2
result = next(y)  # end
print(result)  # 3
try:
    result = next(y)  # 会抛出异常StopIteration
except StopIteration:
    print("StopIteration..")

print("-------------")
for i in test_yield(): # 直接使用for循环调用生成器
    print(i)

yield通常用在循环里面

def test_yield2():
    n = 1
    while True:
        yield n
        n += 1

y = test_yield2()  # 生成器对象
for i in range(10):  # 需要几次就调用几次next()
    print(next(y))