2014-8-5
上面这个例子出自《Think Python》 http://www.greenteapress.com/thinkpython/thinkpython.pdf
变量zipcode赋值为02492时候出现了扑朔迷离的错误(confusing error)。。。为什么会这样呢?
赋值为02132的时候不会报错,但下一次引用的时候值显示为1114!!
其实这是因为数字0开头的时候,被系统判定为8进制了。因为8进制数字只包含0-7,所以第一个02492报错了,第二个02132不会。
>>> zipcode = 02492
File “<stdin>”, line 1
zipcode = 02492
^
SyntaxError: invalid token
>>> zipcode = 02132
>>> zipcode
1114
>>> zipcode = 025
>>> zipcode
21
>>> zipcode = 031
>>> zipcode
25 #这就是著名的oct(31)=dec(25)啊,哈哈哈蛤。
>>> zipcode = 0801
File “<stdin>”, line 1
zipcode = 0801
^
SyntaxError: invalid token
2014-9-11
Python是一门解释型语言,当我们输入代码,保存,然后运行得到结果或报错。这一切看起来很简单,但是对于Pyhton本身,还有一些别的步骤.
当Python开始运行,代码开始被处理之前,Python还会执行一些步骤,现将其编译为“字节码”然后转发到“Python虚拟机”(PVM)中去。
字节码,是源代码底层的、与平台无关的形式。提高执行速度(相比文本类型的源码)。
如果Python进程拥有写入权限,那么就会把字节码保存为一个.pyc结尾的文件。比如script.py的字节码就是script.pyc。它们在同一目录下。
如果没有写入权限,字节码会被保存在内存中直到执行完毕,然后丢弃。
python虚拟机(PVM)
字节码编译成型,或者从已有的pyc文件载入后,会被放入PVM执行。
PVM其实是迭代运行字节码指令的一个大循环,一个接一个地完成操作。PVM是python的运行引擎,它时常表现为Python系统的一部分,并且它是实际运行脚本的组件。从技术上来说,它才是所谓“Python解释器“的最后一步。
看个图吧。