2012-06-26 34 views
0

只是爲了好玩,我寫了這個簡單的功能在Python扭轉一個字符串:逃脫特殊字符這種奇怪的行爲是如何解釋的?

def reverseString(s): 
    ret = "" 
    for c in s: 
     ret = c + ret 
    return ret 

現在,如果我通過在以下兩個字符串,我得到有趣的結果。

print reverseString("Pla\net") 
print reverseString("Plan\et") 

的這個輸出是

te 
alP 
te\nalP 

我的問題是:當傳遞到函數爲什麼特殊字符\n會轉換成新的生產線,而不是函數被一起對其進行解析正在倒車n\?另外,我怎樣才能從解析\n停止函數,而是返回n\

回答

4

你應該看看個別字符序列,看看會發生什麼:

>>> list("Pla\net") 
['P', 'l', 'a', '\n', 'e', 't'] 
>>> list("Plan\et") 
['P', 'l', 'a', 'n', '\\', 'e', 't'] 

因此,大家可以看到,\n爲單個字符,而\e是兩個字符,因爲它不是一個有效的轉義序列。

爲了防止這種情況發生,轉義反斜線本身,或者使用原始字符串:

>>> list("Pla\\net") 
['P', 'l', 'a', '\\', 'n', 'e', 't'] 
>>> list(r"Pla\net") 
['P', 'l', 'a', '\\', 'n', 'e', 't'] 
2

原因是'\ n'是單個字符串中的字符。我猜\ e不是有效的轉義,所以它被視爲兩個字符。

考慮原始字符串你想要的東西,或者只是使用「\\」不管你真正想要的文字「\」

1

翻譯是Python語法的功能,所以它只是Python的解析過程中發生輸入到python本身(即當python解析代碼時)。這在其他時間不會發生。

在程序的情況下,您有一個字符串,它在構建爲對象時包含由'\n'表示的單個字符以及構造時包含子字符串'\e'的字符串。反轉它們之後,python不會重新解析它們。