作者sbrhsieh (sbr)
看板Python
标题Re: [问题] 新手请益
时间Fri Mar 20 23:37:28 2009
※ 引述《justlink (('(oo)'))》之铭言:
: 版本 3.1a
: 使用 win32 idle
: e = "e "
: print(e is "e ")
: 得到True
: Shell 底下
: False
: 囧rz 这是?
你最前头提到以 IDLE 来执行是指执行一个 module 吧?
如果你进入 IDEL UI 界面後,一行一行输入
e = "e "
print(e is "e ") # print e is "e ", in Python 2.5
应该会得到与在 console 下(interactive mode) 相同的结果。
看起来是因为编译动作有一个特性:在一个编译 => code object 的过程,parse 到
的所有内容相同的 string literals,会使用同一个 str object。
这有点儿像是你可以设定 C/C++ compiler 让同一个 source file 里的内容相同的
"..." literals 共用相同位址。
也类似 Java compiler 编译一个 Java class source code 时,相同内容的 string
literals 会参照到该 class 的 const pool 里的同一个 String。
你只要让
e = "e "
print e is "e "
两个 statement 在同一个编译动作内编译完,就可以产出与 run/import module
相同的输出。
>>>
exec 'e="e "\nprint e is "e "' # for Python 2.5
or simply:
>>>
e="e ";print e is "e " # for Python 2.5
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.137.166
※ 编辑: sbrhsieh 来自: 218.173.137.166 (03/20 23:38)
※ 编辑: sbrhsieh 来自: 218.173.137.166 (03/20 23:43)