Python生成器實現斐波那契數列


            比如,斐波那契數列: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語句處繼續
                執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM