2015-11-22 20 views
-1
>>> 'sp\xc4m' 
'sp\xc4m' 
>>> print('sp\xc4m') 
spÄm 

screenshot在python解釋器中,爲什麼使用明確的「打印」和不使用它之間的結果會有所不同?

在IDLE,我覺得用功能「打印」,而不是使用它應該是相同的。而「學習Python(第5版)」這本書支持我的觀點。

>>> lumberjack = 'okay' 
>>> lumberjack 
'okay' 

example from book

我在蟒蛇一年級,和我的母親語言不是英語,所以也許我的問題和表達是可笑,但我不斷地學習。感謝您的幫助。

+0

只有一點點好笑;-)也許你可以,爲什麼你認爲行爲是不同的給出一個很短的例子嗎? - 我相信我可以向你保證這個問題不在打印聲明中。 – user2692263

+0

IDLE的shell是Python的交互式解釋器控制檯文本外殼的GUI版本。它旨在爲相同的輸入提供相同的結果,並且在此處也是如此。所以這個問題真的是'在Python中'。如果這本書繼續使用>>> print(lumberjack)',它會顯示'okay',沒有引號,從交互式解釋器複製。 –

+0

該示例顯示了兩個不同之處。首先,不存在或存在引號,在關於'str'和'repr'的回答中解釋,它們在3.x中保持不變。第二,逃避非ASCII字符,特定於2.x.在3.x中,「sp \ xc4m」被回顯爲「spÄm''。 –

回答

2

在IDLE的交互式解釋是對於調試很有幫助。如果我寫道:

>>> print s 
a  b 

實際變量s中包含什麼?您可以檢查:

>>> s 
'a\tb' 

現在你可以看到它是三個字符,a,顯示爲轉義序列\t,並且b一個標籤。它可能是'a b'(帶空格的九個字符)或「a b」(十二個帶空格的字符)。兩者都以相同的方式打印,但調試表示有助於通過轉義代碼確定確切的內容並引用字符串以可視化開始點和結束點。

這被稱爲變量的「表示」,並且是能夠由功能repr()訪問的調試值。 IDLE使用它來顯示未明確打印的變量。

在互動提示,而不print顯示可變是用於調試。在腳本中不使用print將不顯示任何內容。要強制顯示腳本中的調試值,請使用print repr(s)

+0

非常感謝。現在我可以在python 2.7中解釋結果。但是在python 3.5,repr()的結果是不同的,你能解釋一下嗎?更重要的是,你在Python 2.7中編程嗎?當我像你一樣寫時,爲什麼會出錯。 – Vansiee

+0

@Vansiee,Python 3 *可打印*如果終端編碼支持它們,可以直接輸出非ASCII字符而不使用轉義碼。如果您想將所有非ASCII字符視爲轉義碼,請在Python 3中使用'ascii()'而不是'repr()'。'repr()'仍是一個調試值,並將引用該字符串並將不可打印的字符顯示爲逃跑代碼,但它更加國際友好。 –

3

IDLE打印字符串(或任何其他)的repr

>>> print 'sp\xc4m' 
sp?m 
>>> 'sp\xc4m' 
'sp\xc4m' 
>>> print repr('sp\xc4m') 
'sp\xc4m' 
>>> 
+0

謝謝,它在2.7版本(也許是2.X)下工作。在版本3.5(也許是3.X)中,當只寫'sp \ xc4m'時,結果是'spÄm'。 – Vansiee

1

交互式解釋器的自動打印行爲等同於

_ = the_expression_you_typed 
if _ is not None: 
    print repr(_) 

除了None的事情,這不同於print _print _稱之爲str,而不是repr。表面上,strrepr和之間的區別是,str應該產生更多的人類可讀輸出,而repr應該產生一種不含糊,理想一段源代碼,將產生的對象。

Really, though, the main reason the two functions exist is so print "asdf" prints asdf and just typing "asdf" prints "asdf".

+0

哦,我明白了。非常感謝你。在python 2.7中,使用'print'意味着'str'函數,這更容易理解。而不使用'print'意味着函數'repr',人們可以在其中讀取但它在python 2.7中有效,但在python 3.5中,使用'print'而不使用'print'的結果是相同的。在python 3.5中,當寫str('sp \ xc4m')時,結果是'spÄm',但是當寫入repr('sp \ xc4m')時,結果是''spÄm''。'repr'的功能是否改變了? – Vansiee

+0

@Vansiee:他們不一樣,但'repr'已經變得更願意在Python 3的輸出中使用非ASCII字符。 – user2357112

相關問題