Python中Yield和Return的区别?

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 关键字,函数的执行可以暂时停止,状态可以保存,并在稍后的时间继续运行。

例子

看下面的示例−

# yield的用法
def printresult(String): 
   for i in String: 
      if i == "p": 
         yield i 

# 初始化字符串
String = "生日快乐" 
ans = 0
print ("该单词中 'p' 的数量为:", end = "" ) 
String = String.strip() 

for j in printresult(String): 
   ans = ans + 1

print (ans)

输出

该单词中 'p' 的数量为:2

Python的Return是什么?

yield 语句不同的是,当一个 return 语句被执行时,函数将终止执行并返回给调用它的函数一个值。那些以过程为导向的函数不会向它们的调用者明确返回任何东西,而是返回一个被发送到调用函数的值。虽然一个函数可以有几个返回语句,但每一个语句的各自调用只能调用其中一个。

几乎总是,在函数代码块的最后,会放置一个 return 语句,并且它的目的是返回执行这个函数中包含的所有语句所得到的最终结果。但是,一个 return 语句也可以出现在函数块内较早的位置,以停止执行该块中后续的所有语句。这种情况下,如果它被用于停止函数的执行,那么执行程序的效果将是在调用者中立即重新启动。当没有为 return 对象提供值时,“None”返回对象类型在Python中是等效的。

示例

以下示例展示了在Python中使用 return 的用法 −

# 展示return语句
class Test:  
   def __init__(self):  
      self.str = "生日快乐"
      self.x = "Pradeep"

# 这个函数返回一个Test对象
def fun():  
   return Test()  
# 驱动代码来测试上面的方法
t = fun()   
print(t.str)

输出

生日快乐
Pradeep

Python中Yield和Return的区别

以下表格突出了Python中Yield和Return的主要区别 −

比较基础 产量 返回值
基础知识 在大多数情况下,您需要使用yield函数将典型的Python函数转换为生成器。 在大多数情况下,执行的结论是使用return关键字发出的,它会将结果“返回”给调用它的语句。
函数 它代替函数的返回值,以便暂停函数的执行而不丢失任何本地变量。 它退出一个函数并向其调用者返回一个值。
用途 当生成器向调用者提供中间结果时,调用者将使用此函数。 当函数准备传递一个值时,有必要使用这个返回值。
执行 在yield语句之后编写的代码将在以下函数调用中执行。 而编写返回语句之后的代码将不会被执行。
编译 它有能力多次运行。 它一次只能运行一次。

结论

yield语句生成一个生成器对象,可以向调用者返回多个值而不终止程序,而return语句用于从函数内向调用者返回一个值,并终止程序。return语句用于将值从函数内部返回给调用者。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程