Re: [問題] 新手請益
※ 引述《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)
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章