実際には「生の文字列」はありません。生の文字列リテラル'r'
があります。これは、開始引用符の前にマークされた文字列リテラルです。
「生の文字列リテラル」は、文字列リテラルとは少し異なる構文であり、バックスラッシュ ,\
は「単なるバックスラッシュ」を意味するものと見なされます (リテラルを終了する引用符の直前にある場合を除く) -- いいえ改行、タブ、バックスペース、フォームフィードなどを表す「エスケープ シーケンス」。通常の文字列リテラルでは、エスケープ シーケンスの開始と見なされないように、各バックスラッシュを 2 つにする必要があります。
この構文バリアントが存在する主な理由は、正規表現パターンの構文がバックスラッシュで重く (ただし、最後に決してないため、上記の "except" 句は重要ではありません)、それぞれを二重にするのを避けると、少し見栄えがよくなります - - それで全部です。また、ネイティブの Windows ファイル パス (他のプラットフォームのような通常のスラッシュの代わりにバックスラッシュを使用) を表現することもある程度人気を博しましたが、それが必要になることはほとんどなく (通常のスラッシュは Windows でもほとんど問題なく動作するため)、不完全です ("except" 句のため)。その上)。
r'...'
はバイト文字列 (Python 2.* の場合)、は Unicode 文字列 (Python 2.* の場合) であり、他の 3 種類の引用符のいずれも、まったく同じタイプの文字列をur'...'
生成します (たとえばr'...'
、、、、はすべてバイト文字列など)。r'''...'''
r"..."
r"""..."""
「戻る」とはどういう意味かわかりません-生の文字列型がないため、本質的に前後の方向はありません。完全に通常の文字列オブジェクト、バイトまたはユニコードを表現するための代替構文にすぎません。
もちろん、Python 2.* では、u'...'
常にjust とは異なり'...'
ます。前者は Unicode 文字列で、後者はバイト文字列です。リテラルがどのエンコーディングで表現されるかは、完全に直交する問題です。
たとえば、(Python 2.6) を考えてみましょう:
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
もちろん、Unicodeオブジェクトはより多くのメモリスペースを必要とします(非常に短い文字列の場合、明らかに違いは非常に小さいです;-)。