python3.3中出现的新语法:yield from,有点强?

前言

我们知道,一个函数中,如果出现了yield关键字,那么它一定是一个生成器函数!那yield from又是个啥?

不知道小伙伴有没有看过我上一篇的:标准库中的生成器函数,其中就讲到过一个生成器函数:itertools.chain(),它的功能就是将多个可迭代对象无缝连接在一起!

功能看上去不是很复杂,要不我们自己实现一下试试?

# 例:自己实现chain
def my_chain(*iterable):
    for it in iterable:
        for i in it:
            yield i

 可以看到,实现非常简单,只需要使用一个嵌套循环就可以了!

不过还有更高效的实现方法,那就是yield from的功能了!

# 使用yield from实现
def chain(*iterable):
    for it in iterable:
        yield from it

可以看到,结果还是一样的,但是使用yield from直接代替了内层的for循环! 这样代码读起来更顺畅,其实除了代替循环之外,yield from还会创建通道,把内层生成器直接与外层生成器的客户端联系起来。把生成器当成协程使用时,这个通道特别重要,不仅能为客户端代码生成值,还能使用客户端代码提供值!协程就留着以后再讲吧~

同步更新于个人博客系统:python3.3中出现的新语法:yield from,有点强?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值