Python:对于yield与yield from 的理解

yield是什么?

yield单词的含义:屈服,投降,提供

对于一个函数而言,程序的执行,从上到下执行完一遍,这个函数也就完成了它的使命。

def hello():
print('exe 1')
print('exe 2')

hello()这个函数从上到下依次执行,然后hello()结束。


若一个函数中加入了yield语句,那么这个函数就被增强了,变成了一个生成器:generator。
对于一个函数,其程序执行到了yield语句,那么它选择了`投降`,返回一个结果,这个函数被中断,然后随着生成器的next的执行,该函数从中断的地方执行。
>```
def helloYield():
    print('exe 1')
    yield '1 be exed'
    print('exe 2')
    yield '2 be exed'
执行:
gen=helloYield()
print(gen.__next__())
print(gen.__next__())
结果:
exe 1
1 be exed
exe 2
2 be exed

yield from是什么?

yield 可以返回结果
yield from 可以返回一个新的迭代器

看一个例子:
有一个list,如下:

lists = [
    1, 2, 3,
    [4, 5, [6, 7], 8],
    [[[9, 10], 11]],
    [[]],
    12,
]

需要将list中的所有数据一个个显示出来,如下:

1
2
3
4
5
6
7
8
9
10
11
12

采用yield from的方式,代码如下:

def flatten(items):
    for item in items:
        if isinstance(item, (list, tuple)):
            yield from flatten(item)
        else:
            yield item
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python 是一种相当高级的语言,通过 Python 解释器把符合语法的程序代码转换成 CPU 能够执行的机器码...
    Python程序媛阅读 1,962评论 0 3
  • 1.1==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较)。 ·==是比较两个对象是否相等。 1...
    TENG书阅读 748评论 0 0
  • PYTHON-进阶-ITERTOOLS模块小结转自wklken:http://wklken.me/posts/20...
    C_Y_阅读 1,062评论 0 2
  • 基础1.r''表示''内部的字符串默认不转义2.'''...'''表示多行内容3. 布尔值:True、False(...
    neo已经被使用阅读 1,752评论 0 5
  • 第一次遇见他的时候,是夏天 怀里的小鹿砰砰的乱跳,我差点以为它要冲出来了 我喜欢把自己埋进他的颈间 大口大口的嗅着...
    二桥的异想世界阅读 205评论 0 0