Python 中 Yield 和 Return 的区别?


在 Python 中,生成器的定义是借助yield语句完成的。因此,在我们深入了解yield的具体作用之前,了解生成器的概况非常重要。如果您熟悉 Python,那么很有可能您之前已经使用过 Python 生成器。生成器在 Python 中发挥着重要的作用。在 Python 中,可以使用生成器生成迭代器,但此过程采用略有不同的形式。

Python 生成器是可以动态暂停和恢复并产生一系列结果的函数。它们还可以用于生成随机数。在 Python 2.2 中,生成器首次作为可选功能引入。在 Python 2.3 中,它们成为强制性的。尽管 Python 2.5 中的生成器函数已经具备足够强大的功能,但它们的功能得到了极大的改进。

为了保持向后兼容性,在 Python 2.2 中添加生成器导致引入了一个名为“yield”的新关键字。为了使用生成器,我们需要从_future_模块导入它们。当生成器在 Python 版本 2.3 中成为默认值时,这一点发生了改变,以反映出此更改不再需要。

yield语句可以暂时停止函数的执行,然后向调用者返回一个值,同时保存函数的状态以供以后恢复。这意味着在获得返回值后,整个生成器仍然可以重新启动。return 语句用于终止函数的执行,它也向调用函数的人返回一个值。如果缺少,则您的函数将不返回任何内容。

什么是 Python Yield?

在 Python 生成器中,yield语句取代函数的return,以便将值传递回调用生成器的人,而不会删除任何局部变量。为了更好地理解yield语句在 Python 编程中执行的功能,您首先需要熟悉生成器

生成器函数和普通函数的区别在于,生成器函数在其定义中包含“yield”语句。这以“yield”关键字开头,它标识要返回给调用此函数的人的生成器对象。

在 Python 中,一种称为“生成器”的特定类型的函数,它不是将数据值返回给调用函数的人,而是返回另一个生成器对象。由于yield关键字,可以暂时停止函数的执行,保存状态,并在以后恢复函数。

示例

请看下面的例子 -

# Use of yield def printresult(String): for i in String: if i == "p": yield i # Initializing string String = "Happy Birthday" ans = 0 print ("The number of 'p' in word is: ", end = "" ) String = String.strip() for j in printresult(String): ans = ans + 1 print (ans)

输出

The number of 'p' in word is: 2

什么是 Python Return?

yield语句相反,return语句导致函数终止,同时将值传递回调用它的函数。更具过程性的函数不会显式地向其调用者返回任何内容,而是返回一个值,该值会发送回调用函数。尽管一个函数可以有多个 return 语句,但每次调用这些语句中的每一个时,只能调用其中一个。

几乎总是,return语句将放置在函数块的末尾,其目的是返回执行该函数内包含的所有语句的最终结果。但是,return语句也可能出现在函数块的前面,以停止执行该块中的所有后续语句。如果用于停止函数的执行,则情况将如此。这会导致程序在调用方处立即重新启动执行。“None”返回对象类型是在 Python 中没有为return对象提供值时的等效类型。

示例

以下示例显示了在 Python 中使用return -

# Show return statement class Test: def __init__(self): self.str = "Happy Birthday" self.x = "Pradeep" # This function returns an object of Test def fun(): return Test() # Driver code to test above method t = fun() print(t.str) print(t.x)

输出

Happy Birthday
Pradeep

Python 中 Yield 和 Return 的区别

下表重点介绍了 Python 中 Yield 和 Return 的主要区别 -

比较依据 Yield Return
基础 在大多数情况下,您将需要使用 yield 函数才能将典型的 Python 函数转换为生成器。 在大多数情况下,使用 return 关键字来表示执行的结束,它将结果“返回”给调用它的语句。
功能 它取代函数的 return,以便暂停函数的执行,而不会丢失任何局部变量。 它退出函数并将值返回给其调用者。
用途 当生成器向调用者提供中间结果时,调用者将使用此函数。 当函数准备好传递值时,需要使用此函数。
执行 yield 语句之后的代码在后续的函数调用中执行。 而 return 语句之后的代码将不会执行。
编译 它能够多次运行。 它一次只能运行一次。

结论

yield语句产生一个生成器对象,并且可以在不终止程序的情况下向调用者返回多个值,而return语句用于从函数内部向调用者返回一个值,并且它会终止程序。return 语句用于从函数内部向调用者返回该值。

更新于: 2022年9月10日

10K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.