Python-生成器函数(协程实现底层原理)-yield
2024-10-09 18:26:29
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)
当函数调用子函数,又会创建一个栈帧
所有的栈帧都是分配在堆的内存上,这就决定了栈帧可以独立调用者存在
最新文章
- Baidu set to lose leading role in digital advertising _china daily
- Tomcat源码分析之—组件启动实现分析
- git cherry-pick简介
- 转!! Java中如何遍历Map对象的4种方法
- 30天轻松掌握JavaWeb_使用beanutils
- jquery-data的三种用法
- ny 58 最少步数 (BFS)
- perl use base 代替 @ISA
- iOS_UIButton 简单操作
- strcmp函数
- 豌豆夹Redis解决方案Codis源码剖析:Dashboard
- MVC图片上传详解
- iOS:苹果内购实践
- dataTables使用整理(一)
- Tensorflow函数:tf.zeros
- 【剑指offer】字符串替换
- 如何添加查找 ng vue 客户端快捷方式
- Python爬虫-豆瓣电影 Top 250
- Django基础九之中间件
- 一、SDWebImage分析--库处理流程分析