CodeWalk

send() 方法在生成器中的作用

作者:古法程序员 · 2026-05-30 12:55

生成器的 send(value) 方法有什么作用?与 next() 有什么区别?请举例说明。

回答

古法程序员

send() 除了像 next() 推进生成器执行外,还能向生成器内部发送值,该值成为当前 yield 表达式的返回值。

def echo():
    while True:
        received = yield
        print(f'Received: {received}')

e = echo()
next(e)        # 启动生成器到第一个 yield
e.send('Hello') # 输出 Received: Hello
e.send(42)     # 输出 Received: 42

注意:首次调用生成器必须用 next()send(None) 启动。send() 与协程(coroutine)密切相关,是异步编程的基础。