yield与yield from

我在日常开发中,经常会看到 yield from 这个关键词,每次都很纳闷它和yield到底是神马关系。这次就来一探究竟:

yieldyield from 在Python中都用于生成器函数,但它们的使用场景和目的有所区别:

yield

  • yield 用于一个生成器函数中,以产生一个值。当生成器函数调用到yield时,函数的状态(包括局部变量等)会被保存下来,下次从这个位置继续执行。
  • yield可以用来简化生成器的创建过程,使得函数能以延迟执行的方式(惰性求值)一次返回一个值,这对于处理大型数据集或无穷序列等场景非常有用。
  • 使用yield,开发者需要手动控制每个元素的迭代和产出。

示例:

def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for i in gen:
    print(i)

这将输出:

1
2
3

yield from

  • yield from 是在 Python 3.3 中引入的,是语法上的一个增强。它主要用于在一个生成器中委托另一个生成器,或更一般地说,是用于在一个生成器中产出另一个可迭代对象的所有元素。
  • yield from <expr>的工作方式是,将<expr>解析为一个可迭代对象,并从中迭代每一个元素,将这些元素直接产出,无需手动写循环进行迭代。
  • 使用yield from可以简化内部循环的代码,特别是当要委托的生成器比较复杂或者结构较深时,yield from能够清楚地表达出程序的意图,同时减少模板代码的数量。

示例:

def sub_generator():
    yield 1
    yield 2

def main_generator():
    yield from sub_generator()
    yield from [3, 4]

gen = main_generator()
for i in gen:
    print(i)

这将输出:

1
2
3
4

总结

  • yield 直接产生值;
  • yield from 用于委托其他生成器或可迭代对象,以便产出其所有值。
  • 事实上,yield from不仅仅是迭代器的快捷方式,它还可以更好地处理异常和创建双向通信的生成器(协程)。
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_illusion_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值