在Python中,yield
和 yield from
是两个与生成器(generator)紧密相关的关键字,它们允许函数以迭代的方式逐个返回结果,而不是一次性返回所有结果。这种方式在处理大量数据或需要惰性计算时非常有用,因为它可以节省内存并提高效率。
yield
yield
关键字用于从函数中返回一个值,并保留函数的当前状态,以便下次从该位置继续执行。这使得函数可以记住上一次执行到哪里,并在下一次调用时从那里继续执行。使用 yield
的函数被称为生成器函数,它返回一个生成器对象。
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
for value in gen:
print(value) # 输出: 1, 2, 3
yield from
yield from
是Python 3.3中引入的,用于简化生成器中的嵌套迭代。它允许一个生成器委托给另一个生成器(或任何可迭代对象),自动转发从被委托的生成器(或可迭代对象)中接收到的值,并处理StopIteration异常。这使得代码更加简洁,易于管理。
def sub_generator():
yield 'a'
yield 'b'
def my_generator():
yield from sub_generator() # 委托给sub_generator
yield 'c'
gen = my_generator()
for value in gen:
print(value) # 输出: a, b, c
在上面的例子中,my_generator
使用 yield from
委托给 sub_generator
,自动迭代 sub_generator
返回的每个值,并在完成后继续执行 my_generator
中的剩余代码。
总结
yield
用于从生成器中逐个返回值,并保留函数的执行状态。yield from
用于委托给另一个生成器或可迭代对象,自动转发其值,并处理StopIteration异常,使代码更加简洁。
这两个关键字在处理复杂迭代逻辑时非常有用,尤其是在需要实现复杂的生成器模式或协程时。
标签:迭代,generator,Python,生成器,yield,关键字,my,sub From: https://blog.csdn.net/sheji888/article/details/141220773