同样的,有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:
caseBUILD_MAP:
x=_PyDict_NewPresized((Py_ssize_t)oparg);
PUSH(x);
if(x!=NULL)continue;
break;
接着把键值对压栈,然后执行STORE_MAP:
caseSTORE_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:
caseBUILD_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语言,创建OpenStack虚拟机。
python笔记python笔记python笔记python笔记python笔记python笔记python笔记python笔记python笔记
Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf Python学习笔记 .pdf ...
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笔记PythonPython笔记笔Python笔Python笔记记记Python笔记
pyjvm, 在纯 python 中,实现了Java虚拟机 PyJVMJava 7虚拟机在纯 python 中实现为跳转启动 Check Check Check和 docs detailsGPL需要 python 2.7https://github.com/andrewromanenc
python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台...
最新Python学习笔记,Day 3,总结性学习笔记,适合初学者归纳总结。
马哥python课堂笔记_马哥教育PYTHON相关基础笔记 1 python 推荐书籍 《python Cookbook》 《learn python the hard way》 《google's python class》 《简明python教程》 2 冯诺依曼体系架构 输⼊设备-> 存储器(运算...
第十四章 执行环境 第2部分 高级主题 第十五章 正则表达式 第十六章 网络编程 第十七章 网络客户端编程 第十八章 多线程编程 第十九章 图形用户界面编程 第二十章 Web编程 第二十一章 数据库编程 第二十二章...
Python学习笔记
疯狂Python讲义笔记 Python基础入门到进阶知识手册 对照原文的笔记 由浅入深 循序渐进的笔记
Python 学习笔记
Python笔记 ,python笔记全,Python源码
python刚刚开始学习还没入门的,可以试一下这些例题,掌握快速
千锋python基础教程:1、第一个python程序与数据存储 '千锋python基础教程:2、print&input;与变量和运算符' 千锋python基础教程:3、字符串与循环中的while '千锋python基础教程:4、布尔&list;与条件循环语句与...
Python学习笔记,最基本的python相关基础知识点学习笔记,不包含框架。适合0基础入门,快速入门,快速过一遍Python涉及到的语法和其他基本问题,详细的记录在案。
Python学习笔记.pdf
Python学习笔记 附赠可爱的Python 同时增加了UltraEdit的高亮显示Shell 及Python的文件