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並不會阻斷程序的執行,就不用多說了。python
2.func2()方法中的循環執行第一次就被return結束掉了。(後面的二、三、4就不會有返回的機會了)spa
3.yield你能夠通俗的叫它"輪轉容器",可用現實的一種實物來理解:水車,先yield來裝入數據、產出generator object、使用next()來釋放;比如水車轉動後,車輪上的水槽裝入水,隨着輪子轉動,被轉到下面的水槽就能將水送入水道中流入田裏。code
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處理的:blog
def func3(): for i in range(1,5): yield i yi = [] yi = func3() for y in yi: print y 1 2 3 4