Python 3.x 用next(gen)和gen.send(None)启动Python3生成器有什么区别吗?
创建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(): 尽管如此:
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:这取决于你,但启动发电机时没有区别。