标签:python
!/usr/bin/python3 #-*- coding:utf-8 -*- def a(max): n = 0 while n < max: c = [‘aa‘,‘bb‘,‘cc‘,‘dd‘,‘rr‘,‘ff‘] print ‘yield 前面‘,n yield c[n] print ‘yield 后面‘,n n+=1 for i in a(6): print "for循环print:" ,i print ‘--‘ *25
执行过程:
通过结果可以看出:首先for循环调用函数,执行函数执行到截止yield的部分代码:
def a(max): n = 0 while n < max: c = [‘aa‘,‘bb‘,‘cc‘,‘dd‘,‘rr‘,‘ff‘] print ‘yield 前面‘,n #n为0 yield c[n] #这时n为0
执行到yield返回c[n]这个列表的值,然后继续运行for循环:
for i in a(6): print "for循环print:" ,i print ‘--‘ * 25
执行完for循环,继续调用函数,这时并不是重新执行函数,而是从刚才yield的截断点开始执行,返回print n的值还没有n+1 所以返回为0!!!
然后继续执行函数,会打印n+1的值,遇到yield继续截断,开始执行for循环---如此反复。
结果:
yield 前面 0 for循环print: aa -------------------------------------------------- yield 后面 0 yield 前面 1 for循环print: bb -------------------------------------------------- yield 后面 1 yield 前面 2 for循环print: cc -------------------------------------------------- yield 后面 2 yield 前面 3 for循环print: dd -------------------------------------------------- yield 后面 3 yield 前面 4 for循环print: rr -------------------------------------------------- yield 后面 4 yield 前面 5 for循环print: ff -------------------------------------------------- yield 后面 5
本文出自 “鬼迷心窍” 博客,请务必保留此出处http://dragondragon.blog.51cto.com/6170889/1831616
标签:python
原文地址:http://dragondragon.blog.51cto.com/6170889/1831616