为了好玩,我写了这个简单的函数来反转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\
?
答案 0 :(得分: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']
答案 1 :(得分:2)
原因是'\ n'是字符串中的单个字符。我猜测\ e不是一个有效的逃脱,所以它被视为两个字符。
查看原始字符串以查找所需内容,或者只使用'\\',无论您何时想要文字'\'
答案 2 :(得分:1)
转换是python语法的一个功能,所以它只发生在python解析python本身的输入时(即当python解析代码时)。它不会在其他时间发生。
对于你的程序,你有一个字符串,当它被构造为一个对象时,包含由'\n'
表示的单个字符,以及一个字符串,当构造时包含子字符串{{ 1}}。在你反转它们之后,python不会重新解析它们。