标签: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
标签:py
原文地址:http://beening.blog.51cto.com/9079117/1826466