好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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的解释器存在朱涛所说的运行时,究竟如何要以后看了解释器的实现过程才明白了。等以后填坑。

查看更多关于pythonidle解释和直接pythonscript.py解释有什么差别?的详细内容...

  阅读:47次