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

3 回答 3

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']
于 2012-06-26T18:18:43.587 回答
2

原因是 '\n' 是字符串中的单个字符。我猜 \e 不是一个有效的转义,所以它被视为两个字符。

查看你想要的原始字符串,或者在你真正想要文字 '\' 的地方使用 '\\'

于 2012-06-26T18:15:14.357 回答
1

翻译是python语法的一个函数,所以它只发生在python对python本身的输入解析期间(即python解析代码时)。它不会在其他时间发生。

在您的程序的情况下,您有一个字符串,当它被构造为对象时,它包含由 表示的单个字符'\n',以及一个在构造时包含子字符串的字符串'\e'。反转它们后,python 不会重新解析它们。

于 2012-06-26T18:15:29.483 回答