摘要: Python虚拟机中的if控制流 在所有的编程语言中,if控制流是最简单也是最常用的控制流语句。下面,我们来分析一下在Python虚拟机中对if控制流的实现 我们先扫一下demo.py这个文件,这是一个非常简单的程序,我们的关注点并不在这个程序的本身,而是程序编译后的符号表、常量表、字节码、以及字节 阅读全文
posted @ 2018-08-18 08:58 北洛 阅读(1039) 评论(0) 推荐(0) 编辑
摘要: 其他一般表达式 在前两章:Python虚拟机中的一般表达式(一)、Python虚拟机中的一般表达式(二)中,我们介绍了Python虚拟机是怎样执行创建一个整数值对象、字符串对象、字典对象和列表对象。现在,我们再来学习变量赋值、变量运算和print操作,Python是如何执行的 还是和以前一样,我们看 阅读全文
posted @ 2018-08-12 18:15 北洛 阅读(612) 评论(0) 推荐(0) 编辑
摘要: 复杂内建对象的创建 在上一章Python虚拟机中的一般表达式(一)中,我们看到了Python是如何创建一个空的字典对象和列表对象,那么如果创建一个非空的字典对象和列表对象,Python的行为又是如何呢?demo2.py里面包含一个字典对象和列表对象,这两个对象都是在初始化时就包含元素,首先,我们看一 阅读全文
posted @ 2018-08-12 15:17 北洛 阅读(660) 评论(1) 推荐(0) 编辑
摘要: 在Python虚拟机框架这一章中,我们通过PyEval_EvalFrameEx看到了Python虚拟机的整体框架。而这章开始,我们将了解Python虚拟机是如何完成对Python的一般表达式的执行,这里的“一般表达式”包括最基本的对象创建语句,打印语句。至于if、while等表达式,我们将之归类于控 阅读全文
posted @ 2018-08-12 11:05 北洛 阅读(731) 评论(0) 推荐(0) 编辑
摘要: Python字节码 我们知道,Python源代码在执行前,会先将源代码编译为字节码序列,Python虚拟机就根据这些字节码进行一系列的操作,从而完成对Python程序的执行。在Python2.5中,一共定义了104条字节码指令: opcode.h 如果我们仔细看上面的字节码指令,会发现虽然字节码是从 阅读全文
posted @ 2018-07-31 05:39 北洛 阅读(8165) 评论(0) 推荐(1) 编辑
摘要: Python虚拟机中的执行环境 Python的虚拟机实际上是在模拟操作系统运行可执行文件的过程,首先,我们先来讲一下普通的x86的机器上,可执行文件是以一种什么方式运行的。 图1-1 图1-1所展示的运行时栈的情形可以看作是如下的C代码运行时情形: esp:栈指针寄存器(extended stack 阅读全文
posted @ 2018-07-29 10:43 北洛 阅读(1782) 评论(0) 推荐(0) 编辑
摘要: 上一节:Python之code对象与pyc文件(二) 向pyc写入字符串 在了解Python如何将字符串写入到pyc文件的机制之前,我们先来了解一下结构体WFILE: marshal.c WFILE可以看做是一个对FILE *的简单包装,但在WFILE中,出现了一个奇特的strings域,这个域是P 阅读全文
posted @ 2018-07-28 18:44 北洛 阅读(871) 评论(1) 推荐(0) 编辑
摘要: 上一节:Python之code对象与pyc文件(一) 创建pyc文件的具体过程 前面我们提到,Python在通过import或from xxx import xxx时会对module进行动态加载,如果没有找到相应的pyc或dll文件,就会在py文件的基础上创建pyc文件,之前说过,pyc文件中保存的 阅读全文
posted @ 2018-07-28 12:17 北洛 阅读(894) 评论(0) 推荐(0) 编辑
摘要: Python程序的执行过程 我们都知道,C语言在执行之前需要将源代码编译成可执行的二进制文件,也就是将源代码翻译成机器代码,这种二进制文件一旦生成,即可用于执行。但是,Python是否一样呢?或许很多人都听过,Python和Java都是半编译半解释的语言,那么问题来了,什么又是半编译半解释呢?这还要 阅读全文
posted @ 2018-07-28 09:17 北洛 阅读(1843) 评论(0) 推荐(3) 编辑
摘要: 为什么使用动态内存分配 当我们声明一个数组时,必须在编译时确定它的大小,可能有人会异想天开,觉得先让程序读入一个数字,然后再声明,这样的做法是错误的。但在实际工作中,我们会很经常遇到只有在运行时才能确定数组长度的情况。有人会想,可以用一个极长的数组作为存储,那么势必会造成一些空间上的浪费,哪怕用几千 阅读全文
posted @ 2018-07-17 22:04 北洛 阅读(365) 评论(0) 推荐(0) 编辑