python3 yield 的理解

备注:仅供自己参考


yield 的理解 : 我目前理解 yield 可以分2种情况


第一种情况: ' yield 1 ' 

理解: 和 print(1)的输出一样,但会在内存保存值。

例子:

def AAA():
    r = 0
    print('++++++START+++++++++')
    while r <= 5:
        yield 9
        print('[AAA] AAA r= %s' % r)
        r +=1 
    print('+++++++END++++++++++')
        
for i in AAA():
    print (i)

 输出结果:

++++++START+++++++++
9
[AAA] AAA r= 0
9
[AAA] AAA r= 1
9
[AAA] AAA r= 2
9
[AAA] AAA r= 3
9
[AAA] AAA r= 4
9
[AAA] AAA r= 5
+++++++END++++++++++


第二种情况:' x = yield 9 '

理解:和 print(1)的输出一样,但会在内存保存值;x 的值为 yield 保存值的 传递次数。

例子1 :

def AAA():
    r = 0
    print('++++++START+++++++++')
    while r < 3:
        x=yield 9
        print('[AAA] AAA r= %s' % r)
        print('[AAA] AAA x= %s' % x)
        r +=1 
        print('--第%s次循环结束--' %r)
    print('+++++++END++++++++++')
        
for i in AAA():
    print (i)
输出结果: 

++++++START+++++++++
9
[AAA] AAA r= 0
[AAA] AAA x= None
--第1次循环结束--
9
[AAA] AAA r= 1
[AAA] AAA x= None
--第2次循环结束--
9
[AAA] AAA r= 2
[AAA] AAA x= None
--第3次循环结束--
+++++++END++++++++++

备注:因为 没有传递 yield值,所以x 为 None


例子2:

def AAA(): 
    while 1: 
        print('[AAA]-START')
        x=yield 9
        print('[AAA]-x=%s' %x)
        print('[AAA]-END') 
def BBB(a):
    print('[BBB]-START')
    r = a.send(None)
    n=0
    while n < 3:
        n+=1
        r = a.send(n)
        print('[BBB]-r=%s' %r)
        print('[BBB]-第%s次循环END\n' %n)
    a.close()
    
BBB(AAA())
输出结果:

[BBB]-START
[AAA]-START
[AAA]-x=1
[AAA]-END
[AAA]-START
[BBB]-r=9
[BBB]-第1次循环END


[AAA]-x=2
[AAA]-END
[AAA]-START
[BBB]-r=9
[BBB]-第2次循环END


[AAA]-x=3
[AAA]-END
[AAA]-START
[BBB]-r=9
[BBB]-第3次循环END

备注:每次 运行 ‘a.send(None)’ 和 ‘x=yield 9’ 都会切换 函数,

            例子2从 函数 BBB()开始,第一次运行经过 ‘r = a.send(None)’时,

            切换至函数AAA()。然后运行经过‘x=yield 9’时,又切换回函数BBB(),

            并且 将 9 返回给 ‘ r ’,‘ x ’则记录 yield 的次数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值