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 重要的异步编程基础。