`
jinvasshole
  • 浏览: 803583 次
文章分类
社区版块
存档分类
最新评论

【Python旧时笔记 十】Python虚拟机对创建基本内置对象的执行过程

 
阅读更多
同样的,有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语言,创建OpenStack虚拟机。

    python核心笔记.pdf

    【Python核心笔记】深入浅出地探讨了Python这一强大且多用途的编程语言。Python以其简单易用且功能强大的特性,赢得了广大开发者的喜爱。它是一种解释型的高级编程语言,支持面向对象编程,同时也具备过程化编程的...

    Python学习笔记(干货) 中文PDF完整版.pdf

    这份笔记为Python初学者提供了全面而详细的入门教程,涵盖了从安装环境到编写简单程序,再到掌握核心语法的整个过程。通过学习这些内容,读者可以快速建立起对Python编程的理解,并为进一步深入学习和实践打下坚实...

    菜鸟的Python笔记

    本篇Python笔记将从多个方面对Python进行介绍,包括其安装过程、基本编程概念、数据类型、基本语句、控制结构、函数使用等,旨在帮助初学者快速入门并掌握Python的基本知识。 一、安装Python 要使用Python,首先...

    Python 学习笔记 第二版.pdf

    - **执行**:Python程序的执行过程涉及到多个阶段,首先是词法分析和语法分析,之后是编译成字节码,最后由Python虚拟机执行字节码。 #### 二、内置类型详解 - **数字**:包括整数(int)和浮点数(float),以及复数...

    Python学习笔记.pdf

    8. **面向对象编程:** 类的定义,对象的创建与使用,继承与多态的概念,深入理解OOP在Python中的实现。 9. **异常处理:** try-except语句的使用,自定义异常的抛出与捕获,增强程序的健壮性。 10. **高级主题:** ...

    马哥python课堂笔记-马哥教育PYTHON相关基础笔记.pdf

    在马哥教育的PYTHON相关基础笔记中,我们看到几个关键知识点: 1. **推荐书籍**:学习Python时,有几本经典教材值得参考,包括《Python Cookbook》、《Learn Python the Hard Way》、《Google's Python Class》以及...

    疯狂Python讲义笔记 Python基础入门到进阶知识手册 对照原文的笔记 由浅入深 循序渐进的笔记 共197页.pdf

    数据库编程部分讲解了Python的DB-API,包括基本的数据库操作流程、SQLite数据库的使用,以及如何操作MySQL数据库,包括事务控制、自定义函数和存储过程。 并发编程章节深入讨论了线程和进程。线程的创建、启动、...

    python学习笔记.pdf

    笔记中的基础代码部分还包含了对Python代码的编写规范,如文件开头使用`#--coding:utf-8--`指定文件编码为UTF-8,以及`print`函数的使用等。 通过这份笔记,学习者可以对Python的基础语法和数据结构有一个初步的...

    Python编程笔记 Python开发知识总结整理 Python核心笔记 共51页.pdf

    Python编程笔记是对Python开发知识的全面总结和整理,旨在帮助读者深入理解和掌握这门流行的高级编程语言。笔记分为两大部分,第一部分是Python的核心概念,第二部分涉及更高级的主题。 在前言中,作者可能介绍了...

    python入门笔记(推荐)

    笔记会讲解类和对象的概念,以及继承、封装和多态等面向对象的基本特性。 总的来说,这本“Python入门笔记”将带领你走进Python的世界,通过实例操作,让你掌握Python的基础语法和常用库的使用,为后续的深入学习...

    python学习笔记(带书签版)

    Python内置了高级的数据结构,比如列表、字典、集合和元组,并且支持模块和包的概念,这为组织和重用代码提供了便利。此外,Python是一种跨平台的语言,可以运行在Windows、Linux和Mac OS等操作系统上。 Python的...

    Python学习笔记-王纯业

    5. **面向对象编程**:Python是面向对象的语言,初学者会学习类的定义、对象的创建和方法的使用,包括继承、封装和多态等面向对象的概念。 6. **异常处理**:学习如何使用try/except语句进行错误处理,以及finally...

    疯狂Python讲义笔记.pdf

    在变量和简单类型中,笔记首先介绍了Python的关键字和内置函数,随后讲解了数值类型的整型,指出Python是强类型的动态脚本语言,这意味着类型检查是在运行时进行,从而提供了更高的灵活性。例如,在Python中不能直接...

    Python学习笔记(强烈推荐)

    在编写这份笔记的过程中,皮大庆倾注了对Python的热爱与热情,他的目标是帮助更多人掌握这门强大且易用的编程语言。 总而言之,《Python学习笔记(强烈推荐)》提供了一个全面且细致的学习框架,对于任何想掌握Python...

    Python学习笔记第二版

    5. 虚拟机和环境设置:笔记中提到了虚拟机和基本环境的设置,这对于学习Python来说是基础中的基础。学习如何配置Python开发环境,包括了解虚拟机的使用,是任何想要深入Python编程的人都必须掌握的技能。 6. 内置...

    王纯业的Python学习笔记

    深入学习Python,你需要理解面向对象编程(OOP)的概念,包括类的定义、对象的创建、继承、封装和多态等。Python的内置数据结构如列表推导式、生成器表达式和上下文管理器也是提高代码效率的重要工具。在函数式编程...

    最新Python学习笔记3

    它是Python中内置的高阶函数之一,除了可以直接对列表进行排序之外,还可以接收一个key函数参数来实现自定义排序。key函数在排序过程中会对每个元素进行处理,然后根据处理后的结果进行排序。例如,可以使用sorted()...

Global site tag (gtag.js) - Google Analytics