9

私のPythonのバージョンは次のとおりです。

~$ python --version  
Python 2.6.6

Pythonで次のことを試しました(すべて表示したい):

1: \エスケープシーケンスとして使用

>>> str('Let\'s Python')       
"Let's Python"

2: \エスケープシーケンスとして使用

>>> 'Let\'s Python'             
"Let's Python"

3:str()タイプではなく値として出力

>>> print 'Let\'s Python'       
Let's Python

4: その Python は生の文字列です

>>> repr('Let\'s Python')      
'"Let\'s Python"'

[質問]

5: Python 生文字列

>>> print r'Let\'s Python'    
Let\'s Python

6: これは、次のことがわかりません。

>>> r'Let\'s Python'            
"Let\\'s Python"

>>> r'\\'
'\\\\'

なぜ\\ですか?output in56が異なるのはなぜですか?
rrepr()同じではありませんか? また、との内部表現が同じか異なるか
について説明してください。stringraw strings

4

1 に答える 1

13

生の文字列リテラルr''と文字列表現を混同しています。大きな違いがあります。repr()と同じでr''ありません

r''生の文字列リテラルは、エスケープ コードの処理方法を除いて、通常の文字列リテラルと同じように文字列を生成します。生成された結果は依然として python 文字列です。生の文字列リテラルまたは通常の文字列リテラルのいずれかを使用して、同じ文字列を生成できます。

>>> r'String with \n escape ignored'
'String with \\n escape ignored'
>>> 'String with \\n escape ignored'
'String with \\n escape ignored'

生の文字列リテラルを使用しない場合はr''、スラッシュを二重にしてエスケープする必要がありました。そうしないと、改行文字として解釈されてしまいます。r''などのエスケープコードをまったく解釈しないため、構文を使用するときにエスケープする必要はありませんでし\nた。output、結果の python string valueまったく同じです。

>>> r'String with \n escape ignored' == 'String with \\n escape ignored'
True

インタープリターはrepr()これらの値をエコーバックするために使用しています。Python 値の表現が生成されます。

>>> print 'String'
String
>>> print repr('String')
'String'
>>> 'String'
'String'
>>> repr('String')
"'String'"

結果に引用符が含まれていることに注意してくださいrepr()。文字列のだけをエコーするrepr()と、結果自体が文字列になるため、2組の引用符が含まれます。他の"引用符は の結果の開始と終了を示し、その中repr()に含まているのは Python 文字列 の文字列表現ですString

Python 文字列を生成r''する構文もそうです。Python 値を表す文字列を生成するメソッドです。他の python 値でも動作します:repr()repr()

>>> print repr(1)
1
>>> repr(1)
'1'

1整数は文字列'1'(文字列内の文字) として表されます1

于 2012-12-02T13:39:25.327 に答える