!/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