python协程之yield和yield from



Python的协程(coroutine)是一种轻量级的并发编程模型,它使用异步/非阻塞操作来执行代码。在Python中,协程可以使用yieldyield from关键字来实现。

  1. yield关键字

yield关键字用于在函数中返回一个生成器对象。生成器是一种特殊类型的迭代器,它可以在需要时按需生成数据。通过在函数中使用yield关键字,可以将函数转换为生成器。生成器允许我们逐个产出(yield)值,而不是一次计算所有值并以一个列表的形式返回它们。这可以节省内存,并允许我们处理大量数据。

下面是一个简单的示例,演示了如何使用yield关键字创建一个生成器:

def my_generator():  
    for i in range(5):  
        yield i  
  
for value in my_generator():  
    print(value)

输出:

0  
1  
2  
3  
4
  1. yield from关键字

yield from是Python 3.3中引入的一个新特性,用于在一个生成器中产出另一个生成器的值。使用yield from可以使代码更加简洁易读。

假设我们有两个生成器函数,并且我们想要在一个函数中产出另一个函数的值,我们可以使用yield from来实现这一点。下面是一个示例:

def my_generator1():  
    for i in range(3):  
        yield i  
  
def my_generator2():  
    yield from my_generator1()  # 使用yield from产出my_generator1的值  
    for i in range(3, 6):  
        yield i  
  
for value in my_generator2():  
    print(value)

输出:

0  
1  
2  
3  
4  
5

在这个例子中,my_generator2函数使用了yield from来产出my_generator1函数的值。这使得我们可以将多个生成器的值组合到一个生成器中,从而使代码更加清晰和简洁。同时,协程可以利用这两个关键字实现更复杂的异步操作。