簡體   English   中英

字符串轉義字符

[英]string escape characters

有人可以解釋以下內容:

In [9]: str( """w'o"w""") 
Out[9]: 'w\'o"w'

為什么雙引號沒有轉義? 無論是否使用轉義符,它都會執行相同的操作:

In [10]: print ( 'w\'o"w') 
w'o"w

In [11]: print ( 'w\'o\"w') 
w'o"w

在以下兩種情況下,無法逃脫:

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"

In [15]: str( "w\"o\"w") 
Out[15]: 'w"o"w'

有人可以向我解釋為什么Python具有這種“不一致”之處嗎? 擁有它們的優點是什么?

當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() ,從而在其w'o"w引號並在其中使用反斜杠。

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()輸出中沒有反斜杠,因為不需要用反斜杠來表示字符串。

我希望這可以幫助您了解發生了什么事情。

當您用single quotes將字符串引起來時,您需要在字符串內轉義single quotes -否則解釋器將如何知道該字符串是否應以結尾結尾?

相反,當您使用double quotes將字符串double quotes ,需要在字符串中轉義double quotes

"""引號引起來的"""是一個例外-可以很聰明地根據要包含的字符串的內容來更改其行為。如果將包含單引號的String括起來,則其行為就好像用雙引號將其引起來一樣。如果將包含雙引號的String括起來,則if的行為就好像您已經用單引號將其括起來一樣

您必須轉義字符串字符開始/結束的唯一原因是,編譯器/解釋器知道該符號並不意味着字符串范圍的開始/結束。

因此,如果字符是' ,則'成為特殊字符,而"不是”。反之亦然。如果以'''""" (多行字符串)開頭,則兩個字符都不是特殊字符,因此也不是需要逃脫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM