Python中对于yield的个人理解

</pre>学习yield,自己的一点理解,可能有不对,欢迎指正<p></p><p></p><p>yield定义了一个生成器,每次都会return一个值,返回之后到下次调用的时候,在上次调用结束的地方开始继续执行,并且使用原来的数据不变</p><p>同时,调用返回的其实是一个迭代器结果,因此可以使用for in语句</p><p></p><p>再说明两点,对这个生成器的访问有next()和send('xxxx')两种方式</p><p>两者都会返回下一条yield语句的那个值,但是send可以传一个参数,可以修改当前yield语句的赋值</p><p></p><p>例如:</p><p></p><p></p><pre name="code" class="python">def h():
    print 'step1'
    yield 1
    tt = yield 2
    print tt, "oooooo"
    yield tt
    yield 3


c = h()
n1 = c.next()
print n1
vv = c.next()
print vv
str = c.send('bupt')
print str
print c.next()


n1= next()

执行到yield 1这句,执行了一个print,同时会返回一个1给n1


vv = c.next()这句,从上次执行地方开始继续执行,执行到yield 2这个地方

返回2给vv


send('bupt')执行到yield tt这句,但是send传送了一个参数 bupt,上次执行到yield 2这个地方,然后用这个参数修改,这样就变成了 yield ‘bupt’,同时tt被修改,返回给str


最后一个next,就自然而然返回3了


但是用迭代器的方式访问,就可以安全访问到最后一个yield之后的一些东西,例如:


def my_generator(): 
    print 'starting up' 
    yield 1 
    print "workin'" 
    yield 2 
    print "still workin'" 
    yield 3 
    print 'done' 

for n in my_generator(): 
    print n 




参考文章如下:

参考1

参考2

参考3


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值