,請幫助同行評論這篇文章。 >在python中調用功能時,該功能通常會開始工作,直到遇到返回,異常或達到其末端,然後將其返回控制回呼叫者。每當您再次調用該函數時,該過程將從
> cratch! 開始 說您要求一個人在路上追踪紅色汽車。該人會不斷提出一個問題,問他們是否發現了一輛紅色的汽車,該人又以“是”或“否”回答。如果該人回答“是”,則發現紅色汽車的次數將增加。
>讓我們看看如何在Python中做到這一點:
如果您運行程序,您會注意到什麼?您是否注意到“是”答案的次數總是被限制為1,當您回答“否”時,次數會得到0,而不論以前回答“是”?
>import time def red_cars(answer): n = 0 while True: if answer == 'yes': n = n + 1 return n else: return n stop = time.time() + 5 * 60 while time.time() < stop: answer = raw_input('Did you spot a red car on the road? ("yes" or "no"): ') times = red_cars(answer) print 'You have spotted ' + str(times) + ' cars so far!'這是Python的產量關鍵字發揮作用的地方。收益率是我們暫時向呼叫者進行手部控制的手段,並期望從移交控制的程度繼續進行。
說我們有以下簡單的python腳本:
如果運行腳本,您將獲得以下輸出:>
現在,如果我們使用收益率,如下:
>輸出將如下:
def step_by_step(): return 'step 1' return 'step 2' return 'step 3' step = step_by_step() for i in range (3): print step>
如您所見,我們能夠創建值的值
序列step 1 step 1 step 1,因為對於每個調用,該函數從產生值的點開始。這種類型的功能稱為生成器。這樣的函數會創建一個生成器迭代器,就像每個調用方法Next()我們轉到下一個收益率語句。
如果我們回到主要示例(紅色汽車),則可以按以下方式寫入所需任務:
def step_by_step(): yield 'step 1' yield 'step 2' yield 'step 3' step = step_by_step() for i in range (3): print step.next()因此,正如我們所看到的,當我們有興趣恢復函數(生成器)退出功能的最後一點以及我們也有興趣保持不同調用之間本地變量的值時,收益率很重要。 - 與正常功能不同,在退出功能時會破壞此類值。
>
但是,有其他產量的用途。例如,如果您具有返回序列的函數(例如,在Excel表中的行),則可以使用收益率,並且您需要在序列上迭代序列,而不會一次內存中每個值。也就是說,保存內存。step 1 step 2 step 3在使用迭代時,也可以使用
>收益率,在該功能之間我們有一個很難傳遞的大列表。例如,Python的內置功能可用於iTertools模塊中的排列和組合使用。
> python中的收益關鍵字的常見問題(常見問題解答)中,可以肯定的是,這是一個簡單的示例:在python中使用收益率關鍵字:
產量3 sipser_generator()中的值: print(value) 中的收益率和返回語句,是的,python中的功能可以包含產量和返回語句。但是,重要的是要注意,一旦執行返回語句,函數的執行終止,並且控件將轉移回呼叫者。因此,如果在收益率聲明之前執行返迴聲明,將永遠無法達到收益表。相反,如果首先執行收益表語句,則該函數將被暫停,並且控制權將轉回呼叫者,但是稍後可以恢復該函數,此時可以執行返回語句。我可以在Python中使用遞歸功能中的收益關鍵字嗎?但是,您需要記住在遞歸調用上迭代並產生每個值,否則您將獲得一個發電機對象而不是期望的值。 中,生成器函數與Python中的正常函數之間的主要區別在於,生成器函數使用收益率關鍵字,而正常函數則使用返回關鍵字。當調用發電機函數時,它將返回生成器對象,甚至不啟動函數執行。當第一次調用Next()方法時,該函數開始執行,直到達到產量關鍵字(產生值)。然後,該功能暫停執行和控制將傳遞回呼叫者。另一方面,當調用正常函數時,它立即開始執行並運行到完成,返回一個值。 >如何捕獲生成器函數在python? def simple_generator(): 產量3
在此示例中,simple_generator是一個生成器函數,因為它使用了收益率關鍵字,因此
print(value)。當我們迭代由simple_generator()返回的發電機對象時,它產生了1,然後是2,然後是3,暫停了其在每個收益率之間的執行。
在python中使用收益率關鍵字有什麼好處? >
python中的收益關鍵字允許您編寫可以隨時間產生結果的序列,而不是一次計算它們並將其返回列表中。當結果集很大並且要保存內存時,這可能特別有用。它還允許您創建自己的迭代對象,並將它們與python的對像一起使用,以進行循環,綜合和其他期望具有疑問的功能。
>>一個函數可以包含python?
>生成器函數與正常函數之間有什麼區別在Python?
我可以在python中的單個函數中使用多個收益率語句嗎?是的,您可以在Python中的單個功能中使用多個收益語句。調用函數時,每次遇到收益率語句,暫停其執行並將控件傳遞回呼叫者時,它將產生一個值。下次調用函數的下一個()方法時,它將恢復執行從關閉的位置並運行直到遇到下一個收益率語句的執行。
> python中的發電機函數沒有更多的屈服值時,它會引起停止異常。您可以使用try/def block捕獲此異常。以下是一個示例:
屈服1
屈服2
gen = simple_generator()
嘗試:
print(next(gen))> stopiteration:
在此示例中,我們捕獲了停止的異常,並在沒有的情況下脫離循環
的更多值>我可以在python中使用lambda函數中的收益關鍵字嗎?這是因為lambda函數僅限於單個表達式,而產量關鍵字引入了語句上下文。如果您需要創建生成器函數,則需要使用DEF語句來定義正常函數。
以上是快速提示:了解Python中的收益關鍵詞的詳細內容。更多資訊請關注PHP中文網其他相關文章!