Python 生成器与 yield
生成器是一种特殊的迭代器,用 yield 关键字产生值。
1. 基本生成器
def generate_ints(n):
for i in range(n):
yield i
gen = generate_ints(3)
print(next(gen)) # 0
print(next(gen)) # 1
print(next(gen)) # 2
# print(next(gen)) # StopIteration
在循环中使用
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for num in fibonacci(10):
print(num)
2. 生成器表达式
# 类似列表推导式,但惰性求值
squares = (x**2 for x in range(5))
for s in squares:
print(s)
3. yield from
def chain(*iterables):
for it in iterables:
yield from it
for item in chain([1, 2], [3, 4], [5, 6]):
print(item) # 1,2,3,4,5,6
4. send 和 throw
def runner():
while True:
result = yield
print(f"Received: {result}")
gen = runner()
next(gen) # 启动
gen.send("hello") # Received: hello
gen.send("world") # Received: world
5. 优势
- 节省内存:不一次性生成所有值
- 惰性求值:按需生成
- 代码简洁
生成器是 Python 重要的异步编程基础。