使用 next(gen) 和 gen.send(None) 启动 Python 3 生成器有区别吗?

sar*_*gas 5 yield coroutine python-3.x

当您创建 Python 3 生成器并立即开始运行时。您会收到如下错误:

TypeError: can't send non-None value to a just-started generator
Run Code Online (Sandbox Code Playgroud)

为了继续(向它发送消息或从它获取某些东西),您首先必须调用__next__它:next(gen)或将 None 传递给它gen.send(None)

TypeError: can't send non-None value to a just-started generator
Run Code Online (Sandbox Code Playgroud)

两种方式都会产生相同的结果(启动生成器)。

有什么区别,如果有的话,从发电机之间next(gen),而不是gen.send(None)

Sim*_*ser 3

generator.send()

当调用 send() 来启动生成器时,必须使用 None 作为参数来调用它,因为没有可以接收该值的 Yield 表达式。

调用next()生成器开始执行,直到第一个可以将非值发送到其中yield的表达式,该表达式将成为该表达式的值(例如,)。Noneyieldx = yield

和 的next(gen)行为gen.send(None)方式相同(即使用上没有区别)。