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

Python 3.x 用next(gen)和gen.send(None)启动Python3生成器有什么区别吗?,python-3.x,yield,coroutine,Python 3.x,Yield,Coroutine,创建Python3生成器并立即开始运行时。您会遇到如下错误: TypeError: can't send non-None value to a just-started generator 要想继续(向它发送消息或从它那里获取信息),你首先必须在它上面调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu def echo_back(): 尽管如此:

创建Python3生成器并立即开始运行时。您会遇到如下错误:

TypeError: can't send non-None value to a just-started generator
要想继续(向它发送消息或从它那里获取信息),你首先必须在它上面调用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

def echo_back():
尽管如此:
r=产量
印刷品(r)
#gen是一个
gen=回显()
#发送任何不是“无”的内容,您会在下面看到错误
#但这是意料之中的
总工程师(1)
#TypeError:无法向刚启动的生成器发送非None值
#以下任一行将“使发电机处于激活状态”
#不需要两者都使用
下一代
gen.send(无)
gen.send('你好堆栈溢出')
#打印:Hello堆栈溢出)
两种方法产生相同的结果(启动发电机)

使用
next(gen)
启动发电机与使用
gen.send(None)
启动发电机有什么区别(如果有的话)?

来自:

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

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


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

我有点理解
next(gen)
的需要,因为我在
循环中使用了
生成器。但是'gen.send(None)'非常令人困惑。然后,因为它们在功能上是相同的(启动一个生成器,将其放入
yield
语句),所以当生成器上有一个循环时,我可以选择使用
next(gen)
,并且
gen.send(None)
否则…@sargas:这取决于你,但启动发电机时没有区别。