0

楽しみのために、Pythonで文字列を逆にするこの単純な関数を作成しました。

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

さて、次の2つの文字列を渡すと、興味深い結果が得られます。

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は1文字\eですが、有効なエスケープシーケンスではないため2文字です。

これを防ぐには、円記号自体をエスケープするか、生の文字列を使用します。

>>> 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は有効なエスケープではないので、2文字として扱われると思います。

生の文字列を調べて必要なものを探すか、実際にリテラルが必要な場合は常に「\\」を使用します'\'

于 2012-06-26T18:15:14.357 に答える
1

変換はPythonの構文の関数であるため、PythonがPython自体への入力を解析している間(つまり、Pythonがコードを解析するとき)にのみ発生します。それ以外の場合は発生しません。

プログラムの場合、オブジェクトとして構築されるまで'\n'に、で示される単一の文字を含む文字列と、構築時にサブ文字列を含む文字列があります'\e'。それらを逆にした後、pythonはそれらを再解析しません。

于 2012-06-26T18:15:29.483 に答える