为了好玩,我写了这个简单的函数来反转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\
发布于 2012-06-27 02:18:44
您应该看一下各个字符序列,看看会发生什么:
>>> 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']发布于 2012-06-27 02:15:14
原因是'\n‘是字符串中的单个字符。我猜\e不是一个有效的转义,所以它被视为两个字符。
在原始字符串中查找您想要的内容,或者在您实际需要文字'\‘的地方使用'\’
发布于 2012-06-27 02:15:29
翻译是python语法的一个函数,所以它只在python解析python本身的输入时发生(即,当python解析代码时)。在其他时间不会发生这种情况。
在您的程序中,有一个字符串和一个字符串,前者在构造为对象时包含由'\n'表示的单个字符,后者在构造时包含子字符串'\e'。在颠倒它们之后,python不会重新解析它们。
https://stackoverflow.com/questions/11213442
复制相似问题