python 之yield個人理解

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章