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中文网其他相关文章!