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 语句可以暂时中断函数的执行,并将一个值返回给调用者,同时保存函数的状态以便稍后恢复。这意味着在获得返回值后,整个生成器仍然可以重新启动。函数的执行用返回语句终止,同时也将一个值返回给调用该函数的人。如果函数没有返回任何值,它将不会返回任何内容。
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 语句也可以在函数块中较早地出现,以停止该块中所有后续语句的执行。如果要使用它来停止函数的执行,那么情况就是如此。这将导致在调用者处重新启动程序的执行。当 return 对象没有提供值时,Python中的”None”返回对象类型是等效的。
示例
以下示例演示了在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的区别
下表突出了yield和return在Python中的主要区别-
比较基础 | yield | return |
---|---|---|
基础知识 | 在大多数情况下,您需要使用yield函数将典型的Python函数转换为生成器。 | 在大多数情况下,执行结束时使用return关键字标志,并将结果“返回”给调用它的语句。 |
函数 | 它代替函数的返回,以便暂停函数的执行而不丢失任何局部变量。 | 它退出一个函数并将一个值返回给它的调用者。 |
用途 | 当生成器给调用者提供一个中间结果时,调用者将使用该函数。 | 当函数准备传递一个值时,必须使用这个。 |
执行 | yield语句后面的代码将在下一次函数调用时执行。 | 而return语句后面的代码将不会执行。 |
编译 | 它有能力多次运行。 | 它一次只能运行一次。 |
结论
yield语句产生一个生成器对象,并且可以在不终止程序的情况下向调用者返回多个值,而return语句用于在函数内部向调用者返回一个值,并终止程序。return语句用于从函数内部向调用者返回值。