Python虚拟机中的while循环控制结构 在Python虚拟机之if控制流(一)和Python虚拟机之for循环控制流(二)两个章节中,我们介绍了if和for两个控制结构在Python虚拟机中的实现,但是这里还差一个while循环控制结构.在这里,我们不单单要考虑循环本身的指令跳跃动作,还要考虑另外两个与循环相关的指令跳跃语义:continue和break 下面,让我们看一下demo4.py这个程序,并用dis模块解释其对应的字节码 # cat demo4.py i = 0 while i…
Python虚拟机中的for循环控制流 在Python虚拟机之if控制流(一)这一章中,我们了解if控制流的字节码实现,在if控制结构中,虽然Python虚拟机会在不同的分支摇摆,但大体还是向前执行,但是在for循环控制结构中,我们将会看到一种新的指令跳跃方式,即指令回退.在if控制流章节中,我们看到了指令跳跃时,通常跳跃的距离都是当前指令与目标指令之间的距离.如果按照这种逻辑,进行回退时,这个跳跃是否是负数呢?别急,我们下面一点一点来剖析for循环控制流的实现 # cat demo3.py l…
Python虚拟机中的异常控制流 先前,我们分别介绍了Python虚拟机之if控制流(一).Python虚拟机之for循环控制流(二)和Python虚拟机之while循环控制结构(三).这一章,我们来了解一下异常机制在Python虚拟机中的实现 首先,我们来看下面的代码: # python2.5 >>> 1 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <modul…
一. 条件语句 python条件语句是根据一条或多条语句的执行结果的真假(True Or False)来决定代码块的执行. 而执行内容可以多行,以缩进来区分表示同一范围. 1.Python判断条件真假的形式: 真 :  True, 非零,非空(即列表非空),非假等等 假:False, 0,空列表,空字典,空集合,非真等等 2.常见的判断条件: if 语句的判断条件可以用>(大于).<(小于).==(等于).>=(大于等于).<=(小于等于)来表示其关系. 当判断条件为多个值时,可以…
其他一般表达式 在前两章:Python虚拟机中的一般表达式(一).Python虚拟机中的一般表达式(二)中,我们介绍了Python虚拟机是怎样执行创建一个整数值对象.字符串对象.字典对象和列表对象.现在,我们再来学习变量赋值.变量运算和print操作,Python是如何执行的 还是和以前一样,我们看一下normal.py对应的PyCodeObject所对应的符号表和常量 # cat normal.py a = 5 b = a c = a + b print(c) # python2.5 …… >…
从slot到descriptor 在Python虚拟机类机制之填充tp_dict(二)这一章的末尾,我们介绍了slot,slot包含了很多关于一个操作的信息,但是很可惜,在tp_dict中,与__getitem__关联在一起的,一定不会是一个slot,原因很简单,slot不是一个PyObject,它不能存放在dict对象中.当然,我们再深入思考一下,会发现slot也不会被“调用”.既然slot不是一个PyObject,那么它就没有type,也就无从谈起什么tp_call了,所以slot是无论如何…
参数类别 我们在Python虚拟机函数机制之无参调用(一)和Python虚拟机函数机制之名字空间(二)这两个章节中,分别PyFunctionObject对象和函数执行时的名字空间.本章,我们来剖析一下函数参数的实现. 在Python中,函数的参数根据形势的不同可以分为四种类别: 位置参数:如f(a, b),a和b称为位置参数 键参数:f(a, b, name="Python"),其中的name="Python"被称为键参数 扩展位置参数:f(a, b, *args)…
11.0 序 在上一章中,我们剖析了python虚拟机中的一般表达式的实现.在剖析一遍表达式是我们的流程都是从上往下顺序执行的,在执行的过程中没有任何变化.但是显然这是不够的,因为怎么能没有流程控制呢.下面我们来看看python所提供的流程控制手段,其中也包括异常检测机制. 11.1 python虚拟机中的if控制流 11.1.1 if字节码 if算是最简单也是最常用的控制流语句,我们看看它的字节码是怎么样的呢? a = 1 if a > 10: print("a > 10"…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.Python虚拟机在运行函数调用时会动态地创建新的 PyFrameObject对象, 这些PyFrameObject对象之间会形成PyFrameObject对象链,模拟x86平台上执行时栈 2.PyFuctionObject对象 typedef struct { PyObject_HEAD PyObject *func_code: //相应函数编译后的PyCodeObject对象 Py…
位置参数的默认值 在Python中,允许函数的参数有默认值.假如函数f的参数value的默认值是1,在我们调用函数时,如果传递了value参数,那么f调用时value的值即为我们传递的值,如果调用时没有传递value的值,那么f将使用value的默认值,即为1.那么,带有默认值的位置参数,其实现机制与一般的位置参数有何不同呢? 我们先来看一下demo3.py # cat demo3.py def f(a=1, b=2): print(a + b) f() f(b=5) 然后我们用dis模块编译下…