例子:

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

从顺序中可以看到

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

 def yield_test(n):
for i in range(n):
print(str(sys._getframe().f_lineno) + " before.")
yield call(i)
print(str(sys._getframe().f_lineno) + " after.")
print('i====', i) # 输出的是当前的i值
print(str(sys._getframe().f_lineno) + " afterPrint.") def call(i):
return i * 2 #print(yield_test(4)) # <generator object yield_test at 0x0000000001DE9200> for i in yield_test(3):
print(str(sys._getframe().f_lineno) + " forb.")
print('i=', i) # 输出的是yield函数的返回值 yield函数,相当于一个return语句:下次迭代时候,代码从yield的下一个语句开始执行
print(str(sys._getframe().f_lineno) + " fora.")

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

 79 before.
94 forb.
i= 0
96 fora.
81 after.
i==== 0
83 afterPrint.
79 before.
94 forb.
i= 2
96 fora.
81 after.
i==== 1
83 afterPrint.
79 before.
94 forb.
i= 4
96 fora.
81 after.
i==== 2
83 afterPrint.

参考:

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

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

yield函数的执行顺序的更多相关文章

  1. unity3D技术之事件函数的执行顺序[转]

    unity3D技术之事件函数的执行顺序 转自http://www.yxkfw.com/?p=13703   在unity的脚本,有大量的脚本执行按照预先确定的顺序执行的事件函数.此执行顺序说明如下: ...

  2. Tip8:Unity中诸如 Awake() Start() Update()等函数的 执行顺序

    Unity脚本中有很多的事件函数,下面是各种函数的执行顺序: 1.reset(); 2.Awake(); 3.OnEnable; 4.OnLevelWasLoaded(); 5.Start(); 6. ...

  3. Unity3D中默认函数的执行顺序

    直接用一张图来说明各个默认函数的执行顺序: FixedUpdate以固定的物理时间间隔被调用,不受游戏帧率影响.一个游戏帧可能会调用多次FixedUpdate.比如处理Rigidbody的时候最好用F ...

  4. vue父子组件钩子函数的执行顺序

    加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount-& ...

  5. Unity3D中自带事件函数的执行顺序(转)

    原文:http://www.jianshu.com/p/1d93ece664e2 在Unity3D脚本中,有几个Unity3D自带的事件函数按照预定的顺序执行作为脚本执行.其执行顺序如下: 编辑器(E ...

  6. Unity3D事件函数的执行顺序 - 包含渲染等模块的完整版,中英文对照

    原文地址: http://www.cnblogs.com/ysdyaoguai/p/3746828.html In Unity scripting, there are a number of eve ...

  7. Unity3D中自带事件函数的执行顺序

    在Unity3D脚本中,有几个Unity3D自带的事件函数按照预定的顺序执行作为脚本执行.其执行顺序如下: 编辑器(Editor) Reset:Reset函数被调用来初始化脚本属性当脚本第一次被附到对 ...

  8. Unity3D事件函数的执行顺序

    In Unity scripting, there are a number of event functions that get executed in a predetermined order ...

  9. 多个$(document).ready()函数的执行顺序问题,(未解决)

    今天遇到了一个问题: jQuery获取不了动态添加的元素,我使用的是append添加的.寻求了帮助,得到解决方案: 在文件开头写上这样一段代码来获取,写在$(document).ready()里面. ...

随机推荐

  1. html 按钮跳转问题(及其相关)

    1.点击一个按钮跳转到另一个页面 (网址)   两种写法: <button onclick="{location.href='location.html'}">获取现在 ...

  2. C++ #define,typedef,using用法区别

    一.#define #define 是宏定义命令,宏定义就是将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替,是预编译命令,因此会在预编译阶段被执行 1.无参宏定义 无参宏的宏名 ...

  3. JspServlet

    初始化servlet时,选用的配置类: config.getInitParameter("engineOptionsClass")?(System.getSecurityManag ...

  4. Python学习之while练习--九九乘法表

    效果如下: 实现代码; m = 1n = 1while(m<10): while(n<=m): print(n,"*",m,"=",m*n,end ...

  5. 小程序 设置tabBar选中颜色和图标

    "tabBar": { "selectedColor": "#4da9ff", //颜色 "list": [{ &quo ...

  6. 关于set的unordered特性

    关于set排序无序的问题,原因是set使用哈希表做内存索引. 详细介绍可见: https://stackoverflow.com/questions/12165200/order-of-unorder ...

  7. typescript使用小结

    1. typescript使得js在书写的过程中有了参数类型的限制在 传参的过程中变得严格,减少了不必要的错误的发生 2. tslint同时也兼备了一部分eslint的作用,在一定程度上我们使用tsl ...

  8. 分享非常漂亮的WPF界面框架源码及插件化实现原理

      在上文<分享一个非常漂亮的WPF界面框架>中我简单的介绍了一个界面框架,有朋友已经指出了,这个界面框架是基于ModernUI来实现的,在该文我将分享所有的源码,并详细描述如何基于Mod ...

  9. 深入浅出 Java Concurrency (5): 原子操作 part 4[转]

    在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁). 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度 ...

  10. VS未能加载文件或程序集“xxx.dll” 设置Build Events

    完整错误信息:"System.IO.FileNotFoundException"类型的未经处理的异常在 未知模块 中发生 未能加载文件或程序集"Ctp.Core.dll& ...