def func1(): for i in range(1, 5): print i def func2(): for i in range(1, 5): return i def func3(): for i in range(1, 5): yield i func1() print func2() print func3()
1.print並不會阻斷程序的執行,就不用多說了。
2.func2()方法中的循環執行第一次就被return結束掉了。(后面的2、3、4就不會有返回的機會了)
3.yield你可以通俗的叫它"輪轉容器",可用現實的一種實物來理解:水車,先yield來裝入數據、產出generator object、使用next()來釋放;好比水車轉動后,車輪上的水槽裝入水,隨着輪子轉動,被轉到下面的水槽就能將水送入水道中流入田里。
def func3(): for i in range(1,5): yield i#裝入 gob = func3()#generator 類型 print next(gob)#1 釋放的第一個裝入的數據,(先入先出) print next(gob)#2 print next(gob)#3 print next(gob)#4 print next(gob)#報錯
個人理解,yield在python內部是當作list處理的:
def func3(): for i in range(1,5): yield i yi = [] yi = func3() for y in yi: print y 1 2 3 4