當Python控制檯(包括IPython)顯示字符串的值時,它通過打印字符串的repr()
來實現。 repr()
將產生可由Python解析器解析的輸出,因此它將在必要時包含反斜槓轉義符。 (並且只在必要時)。如果字符串中的所有引號都是單引號,則repr()
會向您顯示帶有雙引號的字符串,因此不需要反斜槓。如果字符串中的所有引號都是雙引號,則repr()
會向您顯示帶有單引號的字符串,因此不需要反斜槓。如果字符串包含混合的單引號和雙引號,則需要反斜槓。
至於發生了什麼事情與print()
電話 - 他們不打印字符串的repr()
,他們顯示出字符串,這是逃逸添加字符串本身沒有反斜槓的str()
值(沒有引號周圍)。
因此,這裏是發生了什麼事情在你的每一個例子:
In [9]: str("""w'o"w""")
Out[9]: 'w\'o"w'
你所得到的字符串w'o"w
的價值和IPython都被顯示在輸出值。所以它調用repr()
這個值,它在裏面引用引號和反斜槓。
In [10]: print ('w\'o"w')
w'o"w
您是打印字符串w'o"w
,沒有得到它的價值。所以IPython顯示打印的字符串。請注意,沒有Out[10]
- print()
函數返回None
,並且IPython在None
時會抑制輸出值。
In [11]: print ('w\'o\"w')
w'o"w
同樣在這裏的事情:你打印的字符串,而不是IPython中展示你的價值。所以它使用str()
,而不是repr()
。
In [12]: str("""w'o'w""")
Out[12]: "w'o'w"
這裏顯示的是字符串的值,所以它會得到引號。但沒有反斜槓,因爲它們不需要表示字符串。
In [13]: str("""w"o"w""")
Out[13]: 'w"o"w'
同上:沒有反斜槓,因爲它們不需要表示字符串。
In [14]: str("w\'o\'w")
Out[14]: "w'o'w"
同上這裏:在repr()
輸出沒有反斜槓,因爲不是在需要他們代表的字符串。
In [15]: str("w\"o\"w")
Out[15]: 'w"o"w'
這裏同上還有:在repr()
輸出沒有反斜槓,因爲不是在需要他們代表的字符串。
我希望這可以幫助你更好地理解發生了什麼。
你能澄清你在問什麼嗎?是你的問題爲什麼值顯示*,因爲它們是,或者是你的問題爲什麼輸入字符串有或沒有轉義不會改變它的值? – BrenBarn
我的問題通過@rmunn的第一段完美回答。 –