Python生成器generator的send和next

本文详细对比了Python中生成器的send方法与next方法的区别。通过一个具体的示例代码,解释了send方法如何传递值给yield表达式,并展示了send与next在生成器控制流中的不同作用。

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语句来接收这个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值