2.1 yield 生成器
Python 中通过 yield 来实现类似协程的功能,下面来看一个简单的 demo:
def task1():while True:print("----task1---")yieldtime.sleep(2)def task2():while True:print("----task2---")yieldtime.sleep(0.5)def main():w1 = task1()w2 = task2()while True:next(w1)next(w2)if __name__ == "__main__":main()
输出结果:
----task1-------task2-------task1-------task2---...
2.2 区别和相似点
协程和生成器主要有以下差异:
- 生成器总是生成值,一般用于迭代的序列
- 协程关注的是消耗值,是数据的消费者
- 协程不会迭代操作关联,但是生成器会
- 协程强调协同控制程序流,生成器强调保存状态和产生数据
相似点:
- 都不要
return来实现重复调用的函数或对象 - 都通过
yield方式来实现
