json_yeid_yield函数的执行顺序

例子:

57ed6f8ee575bc9c63e26fb96a2c9025.png

上图中标明了  行号出现的顺序

从顺序中可以看到

1.开始先执行for循环,执行到93行yield_test(1)时,会调用函数yield_test(),所以打印了79行内容

2.到80行时,遇到了yield,yield可以理解为return,所以93行yield_test(1)得到返回值0

3.接着开始执行94-96行代码

4.当再一次执行93行(for循环)时,从上图顺序中可以看到,程序执行了81-83行。因为n是1,所以这边程序也就停止执行了。

执行结果

27879dfd0bc4eeb340cfe249899109bc.png

从上面的结果中可以看到,yield函数被再次调用时,并不是从函数第一行代码开始执行,而是从yield语句后面一行开始的。

把上面例子中n改成3

1 defyield_test(n):2 for i inrange(n):3 print(str(sys._getframe().f_lineno) + "before.")4 yieldcall(i)5 print(str(sys._getframe().f_lineno) + "after.")6 print('i====', i) #输出的是当前的i值

7 print(str(sys._getframe().f_lineno) + "afterPrint.")8

9

10 defcall(i):11 return i * 2

12

13

14 #print(yield_test(4)) #

15

16

17 for i in yield_test(3):18 print(str(sys._getframe().f_lineno) + "forb.")19 print('i=', i) #输出的是yield函数的返回值 yield函数,相当于一个return语句:下次迭代时候,代码从yield的下一个语句开始执行

20 print(str(sys._getframe().f_lineno) + "fora.")

结果:可以看到下面结果,yield后面语句执行完成后,才继续从yield函数的第一行继续执行。   yield可以看做return,但是return后面语句将不再执行,而yield在下一次执行时,会将yield后面语句先执行完成。

1 79before.2 94forb.3 i=04 96fora.5 81after.6 i====07 83afterPrint.8 79before.9 94forb.10 i= 2

11 96fora.12 81after.13 i==== 1

14 83afterPrint.15 79before.16 94forb.17 i= 4

18 96fora.19 81after.20 i==== 2

21 83 afterPrint.

参考:

https://blog.csdn.net/mieleizhi0522/article/details/82142856

https://blog.csdn.net/wxyangid/article/details/79514040

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值