• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python idle 解释和直接 python script.py 解释有什么差别?

python 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

本文来源gaodai$ma#com搞$$代**码)网@回复内容:

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

<code class="language-python"><span class="err">$</span> <span class="n">python</span><span class="n">Python</span> <span class="mf">2.7</span><span class="o">.</span><span class="mi">5</span> <span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">Mar</span>  <span class="mi">9</span> <span class="mi">2014</span><span class="p">,</span> <span class="mi">22</span><span class="p">:</span><span class="mi">15</span><span class="p">:</span><span class="mo">05</span><span class="p">)</span> <span class="p">[</span><span class="n">GCC</span> <span class="mf">4.2</span><span class="o">.</span><span class="mi">1</span> <span class="n">Compatible</span> <span class="n">Apple</span> <span class="n">LLVM</span> <span class="mf">5.0</span> <span class="p">(</span><span class="n">clang</span><span class="o">-</span><span class="mf">500.0</span><span class="o">.</span><span class="mi">68</span><span class="p">)]</span> <span class="n">on</span> <span class="n">darwin</span><span class="n">Type</span> <span class="s">"help"</span><span class="p">,</span> <span class="s">"copyright"</span><span class="p">,</span> <span class="s">"credits"</span> <span class="ow">or</span> <span class="s">"license"</span> <span class="k">for</span> <span class="n">more</span> <span class="n">information</span><span class="o">.</span><span class="o">>>></span> <span class="n">a</span> <span class="o">=</span> <span class="mf">10.1</span><span class="o">>>></span> <span class="n">b</span> <span class="o">=</span> <span class="mf">10.1</span><span class="o">>>></span> <span class="n">a</span> <span class="ow">is</span> <span class="n">b</span><span class="bp">False</span><span class="o">>>></span> <span class="nb">id</span><span class="p">(</span><span class="n">a</span><span class="p">)</span><span class="mi">140475784803760</span><span class="o">>>></span> <span class="nb">id</span><span class="p">(</span><span class="n">b</span><span class="p">)</span><span class="mi">140475784803736</span><span class="o">>>></span> <span class="p">(</span><span class="mf">10.1</span><span class="p">)</span> <span class="ow">is</span> <span class="p">(</span><span class="mf">10.1</span><span class="p">)</span><span class="bp">True</span><span class="o">>>></span> <span class="k">def</span> <span class="nf">foo</span><span class="p">():</span><span class="o">...</span>   <span class="n">a</span> <span class="o">=</span> <span class="mf">10.1</span><span class="o">...</span>   <span class="n">b</span> <span class="o">=</span> <span class="mf">10.1</span><span class="o">...</span>   <span class="k">return</span> <span class="n">a</span> <span class="ow">is</span> <span class="n">b</span><span class="o">...</span> <span class="o">>>></span> <span class="n">foo</span><span class="p">()</span><span class="bp">True</span></code>

is 是判断identity的,如果两个变量 id (address)相同,那么a is b就是True;
所以从执行结果来看,也是符合的。

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python idle 解释和直接 python script.py 解释有什么差别?
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址