send和next相比,只是开始多了一次赋值的动作,其他运行流程是相同的。
def foo():
r1 = yield 1
r2 = yield 2
print r1, r2
yield 3
generator = foo()
y1 = generator.next()
print 'y1:', y1
y2 = generator.send('res1')
print 'y2:', y2
y3 = generator.send('res2')
print 'y3:', y3
执行结果为:
y1: 1
y2: 2
res1 res2
y3: 3
在执行generator.next(),程序走到yield 1,停止。然后执行generator.send('res1')将res1传给现在程序停止到的yield 1,把值传给r1但是不执行这条 yield部分。然后程序接着往下执行,直到遇到下一个yield停止。
注:第一次调用时,请使用next()语句或是send(None),不能使用send发送一个非None的值,因为没有yield语句来接收这个值。
本文详细对比了Python中生成器的send方法与next方法的区别。通过一个具体的示例代码,解释了send方法如何传递值给yield表达式,并展示了send与next在生成器控制流中的不同作用。
204

被折叠的 条评论
为什么被折叠?



