菲波那切數列與生成器

先寫了一個函數 輸出菲波那切數列:

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語句處繼續執行

發佈了128 篇原創文章 · 獲贊 34 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章