例子:

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

从顺序中可以看到

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. python3-常用模块之sys

    import syssys 是和Python解释器打交道的sys.argvprint(sys.argv) # argv的第一个参数 是python这个命令后面的值 主要用途 1. 程序员 运维人员 在 ...

  2. Hibernate调用Oracle的存储过程

    众所周知,当过多的使用存储过程,触发器等 数据库方言相关的应用时,应用程序的移植性会变差,特别是在Hibernate中使用这些,简直是讽刺,但是当今中国又有哪家公司做项目会关心应用程序的移植性呢? 现 ...

  3. mysql下突然丢失权限

    mysql  Can't read dir of  今天打开mysql数据库突然报了这个错误 查后发现是表没权限,进行了mysql的data目录权限修改 1.show global variables ...

  4. NCDC 天气数据的预处理

    "Hadoop: The Definitive Guild" 这本书的例子都是使用NCDC 天气数据的,但由于书的出版和现在已经有一段时间了,NCDC现在提供的原始数据结构已经有了 ...

  5. MySQL的高可用实现方案之mysql-mmm

    一.环境简述 1.工作逻辑图 2.MySQL-MMM优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性. 缺点:Monitor节点是 ...

  6. Makefile知识点

    1.标准Makefile文件示例如下: #把.o .C .cxx .cpp .hxx .h添加到后缀列表中. .SUFFIXES: .o .C .cxx .cpp .hxx .h #设置变量并赋值,方 ...

  7. 关于CSS3 animation 属性在ie edge浏览器中不能工作

    我想要给div边框加一个闪烁,所以我将css中设置如下 给想要闪烁的div加上blink类  这样在firefox,chrome下是正常显示的,但是在ie下box-shadow属性不能被正常的展现 后 ...

  8. 原声js实现nodejs中qs模块中的parse和stringfiy方法

    function stringify(obj, sep, eq) { sep = sep || '&'; eq = eq || '='; let str = ""; for ...

  9. gitlab merge request

    分支提了mr之后, 又有commit 不用重新提mr,mr中会自动更新 要保证项目下的.git目录中有hooks这个目录(如果是从github迁移到gitlab的项目, 可能没有这个目录, 导致mr不 ...

  10. V8:V8(Javascript引擎)

    ylbtech-V8:V8(Javascript引擎) Lars Bak是这个项目的组长,目前该JavaScript引擎已用于其它项目的开发.第一个版本随着第一个版本的Chrome于2008年9月2日 ...