同样的,有demo.py代码如下:
i = 1
s = "Python"
d = {"1":1, "2":2}
l = [2, 3]
有test.py代码如下:
import dis
source = open('./demo.py').read()
co = compile(source, './demo.py', 'exec')
dis.dis(co)
输出如下:
1 0 LOAD_CONST 0 (1)
3 STORE_NAME 0 (i)
2 6 LOAD_CONST 1 ('Python')
9 STORE_NAME 1 (s)
3 12 BUILD_MAP 2
15 LOAD_CONST 0 (1)
18 LOAD_CONST 2 ('1')
21 STORE_MAP
22 LOAD_CONST 3 (2)
25 LOAD_CONST 4 ('2')
28 STORE_MAP
29 STORE_NAME 2 (d)
4 32 LOAD_CONST 3 (2)
35 LOAD_CONST 5 (3)
38 BUILD_LIST 2
41 STORE_NAME 3 (l)
44 LOAD_CONST 6 (None)
47 RETURN_VALUE
这里需要讨论的就是字典和列表的创建。
对于d = {"1":1, "2":2}这一语句,Python虚拟机首先是执行BUILD_MAP:
case BUILD_MAP:
x = _PyDict_NewPresized((Py_ssize_t)oparg);
PUSH(x);
if (x != NULL) continue;
break;
接着把键值对压栈,然后执行STORE_MAP:
case STORE_MAP:
w = TOP(); /* key */
u = SECOND(); /* value */
v = THIRD(); /* dict */
STACKADJ(-2);
assert (PyDict_CheckExact(v));
err = PyDict_SetItem(v, w, u); /* v[w] = u */
Py_DECREF(u);
Py_DECREF(w);
if (err == 0) continue;
break;
因为刚才把键值对压栈了,所以现在栈顶是key,第二个是value,第三个是字典对象,栈指针-2,然后把键值对放入字典对象中。
接着再插入一个键值对,然后执行STORE_NAME,把字典对象d放入局部符号表中。
对于l = [2, 3]这一语句,Python虚拟机先是把两个元素压栈,然后执行BUILD_LIST,携带参数2:
case BUILD_LIST:
x = PyList_New(oparg);
if (x != NULL) {
for (; --oparg >= 0;) {
w = POP();
PyList_SET_ITEM(x, oparg, w);
}
PUSH(x);
continue;
}
break;
Python虚拟机根据命令参数决定出栈多少个元素放入列表中,最后一样是把列表对象l出栈,放入局部符号表中。
分享到:
相关推荐
python笔记python笔记python笔记python笔记python笔记python笔记python笔记python笔记python笔记
Python笔记PythonPython笔记笔Python笔Python笔记记记Python笔记
Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf ...
Python笔记 ,python笔记全,Python源码
疯狂Python讲义笔记 Python基础入门到进阶知识手册 对照原文的笔记 由浅入深 循序渐进的笔记
Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著...
python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台...
学习笔记之对象的创建,Java技术与Java虚拟机,Java虚拟机的体系结构等。
上课笔记——虚拟机基础知识
python源码剖析笔记 python源码剖析笔记 python源码剖析笔记
plsql创建存储过程并创建job定时任务执行-详细笔记文档总结
3、Python中的基本数据类型 3.1 整型-int 3.2 浮点型-float 3.3 布尔类型-bool 3.4 字符串类型-str 4、Python中的常见运算符 4.1 算术运算符 4.2 关系运算符 4.3 逻辑运算符 4.4 位运算符 4.5 成员运算符 ...
中文 Python 笔记
第四章 Python对象 第五章 数字 第六章 序列:字符串、列表和元组 第七章 映射和集合类型 第八章 条件和循环 第九章 文件和输入输出 第十章 错误和异常 第十一章 函数和函数式编程 第十二章 模块 第十三章 ...
python笔记
Python核心编程笔记 python学习笔记
python学习笔记python学习笔记python学习笔记python学习笔记python学习笔记
Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip ...
Python 学习笔记
马哥python课堂笔记_马哥教育PYTHON相关基础笔记 1 python 推荐书籍 《python Cookbook》 《learn python the hard way》 《google's python class》 《简明python教程》 2 冯诺依曼体系架构 输⼊设备-> 存储器(运算...