栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python dis模块解析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python dis模块解析

Python代码是编译成字节码(Bytecode)再放到CPython编译器中执行,而dis模块可以将python代码分解为字节码。先上一段代码

在输出中,11代表原python代码所在的行数,0代表指令LOAD_CONST的位置索引(在跳转指令中会用到这个索引),LOAD_CONST是人类可读的python字节码指令,它可以以opcode(操作码)100来表示;1表示LOAD_CONST指令的参数,(2)表示该参数对应的值为2。其实可以把1看成是一个字典的key,其对应的value就是2

那么第一行输出在干什么呢?查阅官方文档可以得到指令LOAD_CONST的解释

 co_consts是一个记录常量东西,consti是1(1应该是系统自动分配的),其对应的值是2,即co_consts[1]=2,所以第一行就是把2放入栈顶。

那么第二行就很好理解了,STORE_FAST的解释为

TOS是top of stack的缩写,也就是栈顶的意思。 co_varnames是记录变量的东西,0应该也是系统自动分配的,其对应的变量是x,即co_varnames[0]=x, 于是这句指令就把栈顶的元素取出来赋值给x了。到目前为止已经完成了x=2句代码的操作完成了

再来分析第三行的代码,第一句是LOAD_FAST

 LOAD_FAST的参数var_num是0,而co_varnames[0]=x,于是就把x放入栈顶了

第四行的指令LOAD_CONST:

 参数consti为2,而co_consts[2]=1,于是这条语句又把1放入了栈顶

第五行指令INPLACE_ADD:

其把栈顶的两个元素TOS=1和TOS1=x=2相加,再覆盖栈顶元素,于是此时栈顶的元素就是1+2=3了

第六行指令STORE_FAST把栈顶元素存入x,于是x=3;到这里x+=1这句代码就操作完成了。

贴一张栈的变化过程图

dis.code_info(func)可以查看一些信息

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757068.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号