python中yield和return的区别

yieldreturn 是 Python 中的两个关键字,主要用于从函数中返回值。它们的主要区别在于它们的工作方式和应用场景。

1. return

  • 一次性返回值:当函数执行到 return 时,会立即返回值并退出函数。此时,函数的执行就结束了,所有局部变量都被销毁。
  • 应用场景:适用于希望立即返回一个结果并结束函数的情况。

2. yield

  • 逐步生成值yield 则是用于生成器函数,它不会立即结束函数,而是会暂停函数的执行,并返回一个值。当你再次调用生成器时,函数会从上次暂停的地方继续执行。
  • 应用场景:适用于逐步生成大量数据,或者希望函数可以在多个调用之间保持状态的情况。特别适合处理大数据集,节省内存。

举例说明 returnyield 的区别:

1. 使用 return 的例子:
def simple_return(): 
return [1, 2, 3] 

result = simple_return() 
print(result)
解释:
  • 函数 simple_return() 在执行时,会一次性返回 [1, 2, 3] 列表,然后函数结束。
  • 输出结果为:

    [1, 2, 3]

2. 使用 yield 的例子:
解释:
  • 函数 simple_yield() 是一个生成器函数,每次遇到 yield 时,函数会暂停并返回一个值。
  • 在每次循环中,yield 会返回下一个值,函数不会结束,直到最后一个 yield 完成。
  • 输出结果为:

    1 2 3

关键区别:

  1. 返回的方式不同

    • return 会一次性返回所有结果,函数执行完毕,无法继续从上次停止的地方重新执行。
    • yield 会逐步生成结果,每次返回一个值,函数暂停,等待下一次调用时继续执行。
  2. 内存效率

    • return 一次性将整个数据返回,适用于小数据集。
    • yield 在每次调用时生成一个值,适合处理大数据集,可以节省内存,因为不会一次性加载整个数据集。

使用场景的对比:

return 的应用场景:
  • 如果你有一个小型数据集,并且需要一次性处理,使用 return 更加合适。
def get_numbers(): 
return [i for i in range(1000)] 

numbers = get_numbers() # 一次性返回 1000 个数
yield 的应用场景:
  • 如果你有一个非常大的数据集,并且不想一次性将它们加载到内存中,yield 是更好的选择。
def get_numbers(): 
for i in range(1000): 
yield i numbers = get_numbers() # 返回一个生成器,每次访问生成一个数 

for num in numbers: 
print(num)

yield 的例子中,程序会逐步生成数值,并不会一次性占用大量内存。这对于大规模数据的处理非常有用。

其实yield语句的本质是就是把原函数暂停在那个位置输出结果,等到下次再次调用的时候再次从那个位置开始执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值