回复内容:
题主想的“逐行解释”与“整体解释”的差异的思路是对的,不过细节不太对。下面讲点细节。
跟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 () Trueis 是判断identity的,如果两个变量 id (address)相同,那么a is b就是True;
所以从执行结果来看,也是符合的。
至于问题中的差别,那就是实现相关的,像10.1这样的small number是否再次赋值会复用id那是实现相关的(我的2.7.6是不同的id);我估计可能sublime本身内置有python的运行时(不太确定,我不大用sublime),所以会出现不同的表现。 给自己埋个坑,今天突然想到了一种可能,由于IDLE是逐条解释命令的,而python中的浮点数保存在堆内存中,每次创建一个浮点数,都会直接将堆内存地址压栈,创建相同浮点数时,IDLE也会执行重复动作;而当写到脚本中,用解释器执行时,碰到简单的数值对象,就会检查是否已经存在该对象(数值对象重复判断比较简单),从而直接将存在的堆地址压栈即可。
应该是python的解释器存在朱涛所说的运行时,究竟如何要以后看了解释器的实现过程才明白了。等以后填坑。
查看更多关于pythonidle解释和直接pythonscript.py解释有什么差别?的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did90035