先寫了一個函數 輸出菲波那切數列:
def fib1(max):
n,a,b = 0,0,1
while n < max:
print(b)
c = a+b
a = b
b = c
n += 1
return 'done'
fib1(7)輸出如下:
"C:\Program Files\Python35\python.exe" C:/Users/zty/Desktop/Py3Study/迭代器.py
1
1
2
3
5
8
13
怎麼變成一個生成器呢?
要把fib1函數變成generator,只需要把print(b)改爲yield b就可以了:
def fib2(max):
n,a,b = 0,0,1
while n < max:
yield b
c = a+b
a = b
b = c
n += 1
g = fib2(10)
print(g)
print(g.__next__())
for n in fib2(10):
print(n)
generator和函數的執行流程不一樣。函數是順序執行,遇到return語句或者最後一行函數語句就返回。而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行