yield
關鍵字來控制發電機函數中的執行流? yield
關鍵字在函數中用於將其轉換為發電機。生成器函數沒有返回單個值並終止,而是在每個yield
語句中暫停其執行,將值返回給呼叫者。保留了該函數的狀態,使其可以在下次調用時恢復執行情況。這允許按需生成一系列值,而不是一次生成整個序列。
讓我們用一個例子說明:
<code class="python">def my_generator(n): for i in range(n): yield i*2 gen = my_generator(5) # Create a generator object for num in gen: print(num) # Output: 0, 2, 4, 6, 8</code>
在此示例中, my_generator
不返回列表。取而代之的是,每個呼叫next(gen)
(在for
循環中進行隱式完成)執行該函數,直到遇到下一個yield
語句為止。返回所產生的值,並保存函數的狀態。 next(gen)
的下一個呼叫從上次yield
後的點開始。當功能完成執行時,發電機將終止,而不會遇到其他yield
。
yield
關鍵字而不是返回列表的優點是什麼?使用具有yield
的發電機提供了比返回列表的幾個優點:
簡而言之,當您需要迭代地產生一個值的序列時,發電機是理想的選擇,而無需立即存儲整個序列的內存開銷。
yield
與其他控制流語句結合使用,例如if
和發電機函數中的for
?是的,您可以自由地使用其他控制流yield
,例如if
, elif
, else
, for
Generator函數中的while
。這允許創建複雜的條件序列。
這是一個if
循環for
示例:
<code class="python">def even_numbers_generator(n): for i in range(n): if i % 2 == 0: yield i even_gen = even_numbers_generator(10) for num in even_gen: print(num) # Output: 0, 2, 4, 6, 8</code>
該發電機使用for
循環進行迭代,而if
條件可以過濾均勻的數字,僅產生指定範圍內的偶數數字。
yield
關鍵字與生成器函數上下文中的return
關鍵字有何不同?關鍵區別在於它們如何影響函數的執行:
yield
:暫停該函數的執行,返回值並保留函數的狀態。可以從關閉的位置恢復該功能。return
:完全終止函數的執行。該函數的狀態丟失,無法生成其他值。發電機函數中的return
語句信號表示序列的末尾。從本質上講, yield
創建了迭代器,而return
提供了最終結果並結束了過程。通常在發電機函數中使用return
來發出序列末尾的信號,儘管除了產生值之外,還可以return
值(儘管這不太常見)。使用return
而不產生任何值只會創建常規功能,而不是生成器。
以上是如何使用收益率關鍵字來控制發電機函數中的執行流?的詳細內容。更多資訊請關注PHP中文網其他相關文章!