Python中yield和yield from
一、 yield
yield是实现生成器函数的关键字,yield可以实现在生成器函数执行过程中暂停并返回yield后跟的内容,下次调用生成器函数会从上次暂停的地方继续执行。使用next
def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
print(next(gen)) # 输出: 1
print(next(gen)) # 输出: 2
print(next(gen)) # 输出: 3
# 再次调用 next(gen) 将会抛出 StopIteration 异常
yield可以用于惰性求值,对于处理大规模数据集和无限集而言比较有用。
def infinite_counter(start=0):
while True:
yield start
start += 1
counter = infinite_counter(5)
for _ in range(5):
print(next(counter)) # 输出: 5, 6, 7, 8, 9
next函数是专门用于生成器和迭代器的,对于可迭代对象并不能直接使用next()函数,而是需要先使用iter()函数将list转换为一个iterator。

二、 yield from
yield from是yield的一个扩展用法,他的作用是从可迭代对象、生成器中返回。作用是简化生成器的嵌套调用。
def generator():
yield from iterable_or_generator
等价于
def generator():
for value in iterable_or_generator:
yield value
示例
def gen1():
yield 1
yield 2
def gen2():
yield from gen1()
yield 3
for val in gen2():
print(val)
输出如下:
1
2
3
839

被折叠的 条评论
为什么被折叠?



