pythonidle解释和直接pythonscript.py解释有什么差别?

回复内容:
题主想的“逐行解释”与“整体解释”的差异的思路是对的,不过细节不太对。下面讲点细节。跟sublime、idle啥的没关系。

$ python
python 2.7.5 (default, mar 9 2014, 22:15:05)
[gcc 4.2.1 compatible apple llvm 5.0 (clang-500.0.68)] on darwin
type “help”, “copyright”, “credits” or “license” for more information.
>>> a = 10.1
>>> b = 10.1
>>> a is b
false
>>> id(a)
140475784803760
>>> id(b)
140475784803736
>>> (10.1) is (10.1)
true
>>> def foo():
… a = 10.1
… b = 10.1
… return a is b

>>> foo()
true

is 是判断identity的,如果两个变量 id (address)相同,那么a is b就是true;所以从执行结果来看,也是符合的。至于问题中的差别,那就是实现相关的,像10.1这样的small number是否再次赋值会复用id那是实现相关的(我的2.7.6是不同的id);我估计可能sublime本身内置有python的运行时(不太确定,我不大用sublime),所以会出现不同的表现。
给自己埋个坑,今天突然想到了一种可能,由于idle是逐条解释命令的,而python中的浮点数保存在堆内存中,每次创建一个浮点数,都会直接将堆内存地址压栈,创建相同浮点数时,idle也会执行重复动作;而当写到脚本中,用解释器执行时,碰到简单的数值对象,就会检查是否已经存在该对象(数值对象重复判断比较简单),从而直接将存在的堆地址压栈即可。应该是python的解释器存在朱涛所说的运行时,究竟如何要以后看了解释器的实现过程才明白了。等以后填坑。

Posted in 未分类

发表评论