2016-12-01 25 views
0

我正在使用Python 3,我想查看原始/實際表示法和使用單引號和雙引號的轉義序列的字符串表示形式之間的區別,所以我創建了以下腳本:在Python中轉義序列不一致

raw = "%r" % "\'\"" 
str = "%s" % "\'\"" 

print(raw) 
print(str) 

打印(str)返回(如預期):

'" 

現在我期待的打印(RAW)返回:

'\'\"' 

但是它返回:

'\'"' 

爲什麼會出現出現在打印只有一個反斜槓(原料)聲明,不應該有兩個,因爲這將反映我已經解析成格式化字符串值?我的愚蠢的問題抱歉..

+1

你想創建一個原始文字:'r「\'\」「' – Noah

回答

5

r不代表raw,它代表reprUsing %r invokes repr()對象。引述repr() doc

這個功能使得試圖返回一個字符串傳遞給eval()

源代碼串'\'"'"\'\""是兩個時,將產生一個對象具有相同值的等效對象的表示。

+0

我現在看到它們可以被看作是等價的,但是你有什麼想法爲什麼一個反斜槓保持在另一個之上?或者這是一個Python的怪癖? – seeker

+0

我認爲沒有任何保證選擇表示,只要它代表字符串對象。兩個最短可能的表示將是:'''''''和'''''「''' 。(請記住''''和'''在Python中是等價的,與Bash或C不同)至於爲什麼'repr()'選擇''...''的形式,我不知道。 –

4

...打印(原始)...

都能跟得上。 「r」代表「代表」,而不是「原始」。但是,一旦代碼被編譯,字符串文字是如何寫入的,並且無論如何都不能被檢索。