yield from


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 
"""

参考链接

[1] 12-9 生成器进阶-yield from

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值