Python中对于yield的个人理解

来源:互联网 发布:gts250输出端口有哪些 编辑:程序博客网 时间:2024/04/30 15:18

</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 3c = h()n1 = c.next()print n1vv = c.next()print vvstr = c.send('bupt')print strprint 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
原创粉丝点击