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