跳到主要内容

简述Python yield和yield from关键字 ?

参考答案:

在Python中,yieldyield from是生成器(generator)相关的关键字,它们用于在函数中暂停和恢复执行,并且可以产生(yield)一个值。这对于创建可以一次返回一个值的迭代器非常有用,而不是一次性返回所有值。

yield

yield关键字在函数内部使用,用于暂停函数的执行,并将函数当前的状态保存下来,以便稍后恢复执行。当函数恢复执行时,它会从暂停的地方继续执行,直到遇到下一个yield语句或函数结束。yield语句后面的值会被返回给调用者,并且这个值会成为生成器产生的下一个值。

下面是一个简单的例子,展示了如何使用yield创建一个生成器:

def count_to_five():
    for i in range(1, 6):
        yield i

# 创建一个生成器对象
generator = count_to_five()

# 使用next()函数从生成器中获取值
print(next(generator))  # 输出 1
print(next(generator))  # 输出 2
# 以此类推,直到5

yield from

yield from是Python 3.3引入的一个新特性,它允许你在一个生成器内部委托给另一个生成器或可迭代对象。这意味着你可以在一个生成器中使用yield from来产生另一个生成器或可迭代对象的值,而无需手动迭代它。这有助于简化代码,并且允许你更容易地组合多个生成器或可迭代对象。

下面是一个使用yield from的例子:

def count_to_n(n):
    for i in range(1, n+1):
        yield i

def count_by_tens(start, end):
    for i in range(start, end+1, 10):
        yield from count_to_n(i)

# 创建一个生成器对象
generator = count_by_tens(1, 50)

# 使用next()函数从生成器中获取值
print(next(generator))  # 输出 1
print(next(generator))  # 输出 2
# 以此类推,直到50,每10个数为一组

在这个例子中,count_by_tens生成器使用yield from来产生count_to_n生成器的值。这允许count_by_tens生成器在每次迭代中产生一个由count_to_n生成器产生的值序列。