Python 生成器与协程:惰性求值与异步基础
生成器是 Python 实现迭代器和协程的基础,节省内存且支持暂停/恢复。
1. 生成器函数(yield)
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for num in fibonacci(5):
print(num) # 0,1,1,2,32. 生成器表达式
squares = (x**2 for x in range(10))
print(next(squares)) # 03. 协程(yield 接收值)
def averager():
total = 0
count = 0
avg = None
while True:
value = yield avg
if value is None:
break
total += value
count += 1
avg = total / count
coro = averager()
next(coro) # 启动
print(coro.send(10)) # 10
print(coro.send(20)) # 154. yield from 委托
def subgen():
yield 1
yield 2
def main():
yield from subgen()生成器是 asyncio 事件循环的基础,理解它有助于深入异步编程。
