有人可以解釋這個過程中的每一步嗎?對於我在發電機()中的「什麼」:「做什麼?
我從來沒有見過「因爲我在X:」表示,其中X爲發電機,而我無法理解,如果它沒有被插入()之間的我與功能如何交互。
def fib():
a, b = 0,1
while True:
yield b
a,b = b, a + b
for i in fib():
print(i)
有人可以解釋這個過程中的每一步嗎?對於我在發電機()中的「什麼」:「做什麼?
我從來沒有見過「因爲我在X:」表示,其中X爲發電機,而我無法理解,如果它沒有被插入()之間的我與功能如何交互。
def fib():
a, b = 0,1
while True:
yield b
a,b = b, a + b
for i in fib():
print(i)
for loop
如果像上面那樣使用它,則會生成一次性變量。例如,list object
在循環中一次又一次地使用,但一次性迭代器在使用後會自動刪除。
而且yield
是像return
其在功能使用的一個術語。它會給出結果並在循環中再次使用它。 你的代碼給你稱爲斐波那契的數字。
def fib():
a, b = 0,1 #initially a=0 and b=1
while True: #infinite loop term.
yield b #generate b and use it again.
a,b = b, a + b #a and b are now own their new values.
for i in fib(): #generate i using fib() function. i equals to b also thanks to yield term.
print(i) #i think you known this
if i>100:
break #we have to stop loop because of yield.
for
只是在表達式的值範圍內。如果表達式調用一個函數,那麼它的值就是函數返回的任何值,所以函數的結果範圍爲。
請注意,儘管fib
不是函數,但它是一個生成器。它先後產生每一步的價值。
我不知道的功能是不是發電機。有沒有一個鏈接可以指出我解釋它們之間的區別? – iNeedToMakeBetterQuestions
快速谷歌搜索顯示[this](http://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/)和[this](https:// wiki.python.org/moin/Generators)。儘管如此,這更像是一個次要的問題:如果'fib'是一個返回'[1,2,3,4]'的正常函數,那麼代碼就會工作得很好,for仍然會遍歷它。 –
'fib'仍然是一個功能。 'type(fib)=
要理解這一點,你必須明白什麼yield
關鍵字一樣。請看看這個:What yield does?
現在你知道fib()
不是一個函數,它是一個生成器。 這樣,代碼:
def fib():
a, b = 0,1
while True:
yield b #from here value of b gets returned to the for statement
a,b = b, a + b
for i in fib():
print(i)
由於While
從來沒有得到一個錯誤的值。它繼續運行。
這是鉑金:http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python?rq=1 – sobolevn