Board logo

标题: Python:对于yield与yield from 的理解 [打印本页]

作者: look_w    时间: 2019-2-19 16:27     标题: 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




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0