码迷,mamicode.com
首页 > 编程语言 > 详细

Python yield

时间:2016-07-14 19:34:02      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:py

if __name__ == ‘__main__‘:
    def func():
        print u"-------新的开始--------"
        i = 0
        print ‘---创建i = %d-----‘%i
        i = yield i
        # 第一次迭代 next并没有执行该表达式,只是将yield后面的只返回了后面的值
        # 第二次迭代 yield 返回send所带的参数,向后直到遇到yield,然后返回后面的值
        print u‘函数内i 的值:%s‘%i
        n = 1
        print ‘---创建n = %d-----‘%n
        i = yield n
        # 第二次迭代,返回 n
        # 第三次迭代,yield返回 348782 ,然后向后
        print u‘函数内i 的值:%s‘%i
        print u‘函数内n 的值:%s‘%n
        n = yield n
        # 第三次迭代,返回 n
        # 第四次迭代,由于并有send值,故yield返回的是none,向后
        print u‘函数内n 的值:%s‘%n
        n = yield n
        # 第四次迭代,返回 n

        print n
        print ‘----end----------‘
        # 以迭代器运行,会执行完全部代码



    f = func()
    print f.next()
    print f.send(342)
    print f.send(348782)
    print f.next()
    # 再next就会报错了,所以这样调用,后面的代码没有执行

    for s in func():
        pass



-------新的开始--------
---创建i = 0-----
0
函数内i 的值:342
---创建n = 1-----
1
函数内i 的值:348782
函数内n 的值:1
1
函数内n 的值:None
None
-------新的开始--------
---创建i = 0-----
函数内i 的值:None
---创建n = 1-----
函数内i 的值:None
函数内n 的值:1
函数内n 的值:None
None
----end----------




总结:next()返回下一个yield后面的值

   send() 上次停止的yield 返回send所带的参数,并向下执行,返回下一个yield后面的值

    故最开始不能调用send(),会报错


   以正常迭代器的方式调用,会执行完全部代码


注:有yield 就不能有return


Python yield

标签:py

原文地址:http://beening.blog.51cto.com/9079117/1826466

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!