title: yield from
top: 43
date: 2023-01-19 11:45:20
tags:
- yield from
categories: - python
yield from的使用案例
# case 1
def genA():
ms = []
i = 0
while True:
print(i, end=' ')
m = yield f"A{i}"
print(m)
ms.append(m)
if m is None:
break
i += 1
return ms
def getB():
m = yield from genA()
print(m, '---------')
if __name__ == '__main__':
g = getB()
g.send(None)
g.send('v0')
g.send('v1')
g.send('v2')
g.send('v3')
g.send(None)
"""output
0 v0
1 v1
2 v2
3 v3
4 None
['v0', 'v1', 'v2', 'v3', None] ---------
Traceback (most recent call last):
File "/proj/ebu_logic/bgapeshen/work/401-projects/02-hsCompile/lib/flow/test.py", line 46, in <module>
g.send(None)
StopIteration
"""
# case 2
def genA():
ms = []
i = 0
while True:
print(i, end=' ')
m = yield f"A{i}"
print(m)
ms.append(m)
if m is None:
break
i += 1
return ms
def getB():
m = yield from genA()
print(m, '---------')
if __name__ == '__main__':
g = getB()
g.send(None)
g.send('v0')
g.send('v1')
g.send('v2')
g.send('v3')
# 捕获异常
try:
g.send(None)
except StopIteration as err:
...
"""output
0 v0
1 v1
2 v2
3 v3
4 None
['v0', 'v1', 'v2', 'v3', None] ---------
"""
# case 3
def genA():
ms = []
i = 0
while True:
print(i, end=' ')
m = yield f"A{i}"
print(m)
ms.append(m)
if m is None:
break
i += 1
return ms
def getB():
# while True 自动捕获异常
while True:
m = yield from genA()
print(m, '---------')
if __name__ == '__main__':
g = getB()
g.send(None)
g.send('v0')
g.send('v1')
g.send('v2')
g.send('v3')
g.send(None)
g.send('v0')
g.send('v1')
g.send('v2')
g.send(None)
"""output
0 v0
1 v1
2 v2
3 v3
4 None
['v0', 'v1', 'v2', 'v3', None] ---------
0 v0
1 v1
2 v2
3 None
['v0', 'v1', 'v2', None] ---------
0
"""