python yield from理解

1、yield from让生成器(带yield函数),能简易的在其他函数中直接调用

2、以下为代码,htest为生成器generator,itest通过yield from调用htest,itest也是生成器。创建itest实例不断获取数据,当生成器结束时,抛出StopIteration异常(由itest抛出)。参考:点击打开链接

3、yield from也可以通过变量接收返回值。变量接收的值由htest通过return返回。

def htest():
    i = 1
    while i < 4:
        print('are you ok?')
        n = yield i+1
        if i == 3:
            return 100
        print ('[htest]:   n=%s'%n)
        print('[htest]:   i=%s'%i)
        i += 1


def itest():
    print('what is the wrong')
    val = yield from htest()
    print('[itest]:   %s'%val)

t = itest()
k = t.send(None)
print('get k --> %s'%k)
j = 0
while j < 8:
    j += 2
    try:
        m=t.send(j)
        print('get m --> %s'%m)
    except StopIteration as e:
        print('异常了')

实验结果:

由结果可以看出,

执行k=t.send(None),htest中将第一个yield的i+1的值2返回给k。

while循环阶段,将j的值通过itest传递给htest中的yield表达式的+1。

当j=0,j+=2,j=2,通过t.send(j)传递到htest中,此时htest中n=yield i+1,即n=2。

此时的i为1(跟n值无关,由htest中初始i=1控制)。

执行

        print ('[htest]:   n=%s'%n)
        print('[htest]:   i=%s'%i)
        i += 1

后,继续循环,直到下一个yield出现。

        print('are you ok?')
        n = yield i+1

此时i=2,将i+1的值3返回给m。

当j=2,j+=2...依此类推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值