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 语句用于从函数内部向调用者返回该值。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP