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...依此类推

阅读更多
上一篇python yield 理解
下一篇wps 图表目录生成 分开 图版
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭