zoukankan      html  css  js  c++  java
  • yield函数的执行顺序

    例子:

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

    从顺序中可以看到

    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,所以这边程序也就停止执行了。

    执行结果

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

    把上面例子中n改成3

     1 def yield_test(n):
     2     for i in range(n):
     3         print(str(sys._getframe().f_lineno) + " before.")
     4         yield call(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 def call(i):
    11     return i * 2
    12 
    13 
    14 #print(yield_test(4))  # <generator object yield_test at 0x0000000001DE9200>
    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 79 before.
     2 94 forb.
     3 i= 0
     4 96 fora.
     5 81 after.
     6 i==== 0
     7 83 afterPrint.
     8 79 before.
     9 94 forb.
    10 i= 2
    11 96 fora.
    12 81 after.
    13 i==== 1
    14 83 afterPrint.
    15 79 before.
    16 94 forb.
    17 i= 4
    18 96 fora.
    19 81 after.
    20 i==== 2
    21 83 afterPrint.

    参考:

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

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

  • 相关阅读:
    Dicom文件转mhd,raw文件格式
    李宏毅机器学习笔记6:Why deep、Semi-supervised
    李宏毅机器学习笔记5:CNN卷积神经网络
    Oracle数据库类型总结
    Oracle数据库连接生成DataX的job-Json
    [JavaWeb基础] 030.dom4j读取xml的4种方法
    [JavaWeb基础] 029.OGNL表达式介绍
    eatwhatApp开发实战(五)
    [Axure教程]0005.系统函数与变量介绍
    eatwhatApp开发实战(四)
  • 原文地址:https://www.cnblogs.com/moonpool/p/11386142.html
Copyright © 2011-2022 走看看