当前位置:Gxlcms > Python > pythonidle解释和直接pythonscript.py解释有什么差别?

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

时间:2021-07-01 10:21:17 帮助过:17人阅读

回复内容:

题主想的“逐行解释”与“整体解释”的差异的思路是对的,不过细节不太对。下面讲点细节。
跟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的解释器存在朱涛所说的运行时,究竟如何要以后看了解释器的实现过程才明白了。等以后填坑。

人气教程排行