[英]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)返回給調用者。
為了節省一點時間並使事情完全清楚,這里有幾個問題。
在第一次迭代中,唯一出現的是返回a的初始值嗎? 它是否完全停止屈服?
在第二次迭代中,它從哪里得到 1? 如果 a, b = b,那么 a + b 就是 1+1,那么為什么第二個值不返回為 2?
我也不確定 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.