Python:对于yield与yield from 的理解

2017-02-03  本文已影响995人  linheimx

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
上一篇 下一篇

猜你喜欢

热点阅读