比如,斐波那契數列:1,1,2,3,5,8,13,21,34.... 用列表生成式寫不出來,但是我們可以用函數把它打印出來: def fib(number): n, a, b = 0, 0, 1 while n < number: print(b) a, b = b, a + b n = n + 1 return 'OK!' print(fib(5)) 結果: 1 1 2 3 5 OK! 我們可以看出從第一個元素開始,推算出后續任意的元素。很像generator。 要把fib函數變成generator,只需要把 print(b)改為 yield b就可以了: def fib(number): n, a, b = 0, 0, 1 while n < number: yield b a, b = b, a + b n = n + 1 return 'OK!' print(fib(5))#<generator object fib at 0x105606ca8> 注意: 這里難理解的就是generator和函數的執行流程是不一樣的。 函數是順序執行,遇到return語句或者最后一行函數語句就 返回。 注意:函數創建一次生成一個生成器,所以我們會將創建的生 成器賦值給一個變量。如果直接用函數本身這個生成器, 我們沒用一次生成一個新的生成器對象,所以,我們一 般都將創建的生成器賦給一個變量。 generetor的函數,在每次調用 next()的時候執行,遇到 yield語句返回,再次執行時從上次返回的yield語句處繼續 執行。