2016-12-01 8 views
0

私はPython 3を使用しています。シングルクォートとダブルクォートのエスケープシーケンスを使用した場合の生の/実際の表現と文字列表現の違いを見たいので、次のスクリプトを作成しました: (予想通り)Pythonのエスケープシーケンスの矛盾

raw = "%r" % "\'\"" 
str = "%s" % "\'\"" 

print(raw) 
print(str) 

印刷(文字列)を返します:

'\'\"' 

'" 

は今、私は返すように(生)の印刷を予想しました

それは返ししかし:

'\'"' 

はなぜ印刷に存在する唯一のバックスラッシュ(生)ステートメントがあり、これは私がフォーマットされた文字列に解析されている値を反映するように、そこに、2ではないでしょうか?私は..

+1

生のリテラルを作成したい: 'r" \ '\ "" ' – Noah

答えて

5

rは、rawの略ではありません。reprの略です。オブジェクト上のUsing %r invokes repr()

)この関数は(evalに渡されたときに同じ値を持つオブジェクトを生じる文字列を返すを試みる

ソースコード列'\'"'"\'\""が2つである:repr() docを引用同等のオブジェクトの表現。

+0

これは同等と見なすことができるようになりましたが、逆スラッシュが他のものに残っていた理由を知ることができますか? Pythonのquirk? – seeker

+0

文字オブジェクトを表す限り、どの表現が選択されているかは保証されていないと思われます。可能な限り短い表現は '' \ '"''と '" \ "" ' (なぜなら、 'repr()'が '' ... "'フォームを '' ... "'で選択する理由については、 ''何も思いつきません。 –

4

愚かな質問ごめんなさい...プリント(生)...

いいえ。 "r"は "表現"を意味し、 "生"ではありません。しかし、文字列リテラルがどのように書かれたかは、コードがコンパイルされるとすぐに失われ、関係なく検索することはできません。