yield

  1. 函数执行的时候,找到yield关键字,则会标记这个函数,返回生成器对象

  2. Python解释器会记录最近一次函数中yield位置

  3. 生成器对象也是分配在栈堆上

  4. 通过yield关键字,让程序员主动控制函数的运行状态,暂停函数还继续运行

  5. 生成器可以return值

def fib():
"""斐波那契数列生成器"""
start, end = 1, 1
hai = yield start
print(hai)
hai = yield end
print(hai)
while True:
start, end = end, start + end
hai = yield end
print(hai) if __name__ == '__main__':
func = fib()
one = func.send(None)
two = func.send("beimenchuixue_1")
three = func.send("beimenchuixue_2")
four = func.send("beimenchuixue_3")
print(one, two, three, four)

  

 函数运行原理

  Python解释器是用C语言写的,会用PyEvalFramEx(c函数)去执行我们的函数,会首先创建一个栈帧(stack frame)

  Python一切皆对象,栈帧对象,运行字节码对象 import dis dis.dis(funcName)
  当函数调用子函数,又会创建一个栈帧
  所有的栈帧都是分配在堆的内存上,这就决定了栈帧可以独立调用者存在

最新文章

  1. Baidu set to lose leading role in digital advertising _china daily
  2. Tomcat源码分析之—组件启动实现分析
  3. git cherry-pick简介
  4. 转!! Java中如何遍历Map对象的4种方法
  5. 30天轻松掌握JavaWeb_使用beanutils
  6. jquery-data的三种用法
  7. ny 58 最少步数 (BFS)
  8. perl use base 代替 @ISA
  9. iOS_UIButton 简单操作
  10. strcmp函数
  11. 豌豆夹Redis解决方案Codis源码剖析:Dashboard
  12. MVC图片上传详解
  13. iOS:苹果内购实践
  14. dataTables使用整理(一)
  15. Tensorflow函数:tf.zeros
  16. 【剑指offer】字符串替换
  17. 如何添加查找 ng vue 客户端快捷方式
  18. Python爬虫-豆瓣电影 Top 250
  19. Django基础九之中间件
  20. 一、SDWebImage分析--库处理流程分析

热门文章

  1. SpringBoot(19)---SpringBoot整合Apollo
  2. Vue 通过调用百度API获取地理位置-经度纬度省份城市
  3. JVM大作业5——指令集
  4. 为什么网站URL需要设置为静态化
  5. win环境下安装配置openCV-4.3.0
  6. 前端ES6 一些面试题
  7. OpenJ_Bailian - 2995-登山(两遍最长上升子序列+枚举顶点)
  8. sort(桶排序+hash)
  9. 知识点干货——CSS动画
  10. MySQL查询更新所有满足条件的数据