簡體   English   中英

Python 斐波那契數列生成器

[英]Python Fibonacci Generator Sequence

我目前正在研究 Python 並且有點卡在斐波那契數生成器上。 經過幾個小時的研究,我沒有取得太大進展。 我在一定程度上理解 output,在我知道每次迭代這里發生了什么之前,我只是不願意轉移到另一個主題。

    def fibonacci_generator() :
        a , b = 0 , 1
        while True :
            yield a
            a , b = b , a + b

    fib = fibonacci_generator() 

    for i in fib :
        if i > 100 :
            break
        else :
            print( 'Generated:' , i )

運行此代碼后,我看到以下 output。

    Generated: 0
    Generated: 1
    Generated: 1
    Generated: 2
    Generated: 3
    Generated: 5
    Generated: 8
    Generated: 13
    Generated: 21
    Generated: 34
    Generated: 55
    Generated: 89

根據Stack Overflow上類似問題的幾個回答,我了解到第一次調用生成器時,a和be分別初始化為0和1,然后返回帶有yield語句的值(a = 0)返回給調用者。

為了節省一點時間並使事情完全清楚,這里有幾個問題。

  1. 在第一次迭代中,唯一出現的是返回a的初始值嗎? 它是否完全停止屈服?

  2. 在第二次迭代中,它從哪里得到 1? 如果 a, b = b,那么 a + b 就是 1+1,那么為什么第二個值不返回為 2?

  3. 我也不確定 1 的相同值是如何返回兩次的。

綜上所述,我想知道output的每一行的具體操作是什么。我似乎無法理解那部分。 讓我重申一下,我已經查看了很多不同的地方,但我所看到的沒有任何幫助。

作為背景,fibonacci_generator 是一個生成器 function ,它返回一個生成器,實際上只是一個迭代器 object

在第一次迭代中,生成器生成 a,然后停在那里直到您再次調用它。 再次調用它后,它會重新計算 a 和 b,因為它為 True 而進入循環,並產生重新計算的 a。 它只是不斷重復這個過程。

對於你的第二個和第三個問題:

每當您有賦值語句時,在賦值語句的右側完成之前,左側的變量不會被賦值。

因此,在

a, b = b, a + b

當您計算a + b時, a不等於b ,但它等於原來的值。 換句話說, a, b = b, a + b等價於:

temp = a
a = b
b = temp + b

如果你遵循這個邏輯,你就會明白為什么代碼會這樣運行。

每當您有賦值語句時,在賦值語句的右側完成之前,左側的變量不會被賦值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM