2016-06-26 8 views
0

私は以下の結果を理解することができませんでどのように機能するかを理解する:私は接頭辞「R」は生の文字列を行いますと\r'\n'であるため、通常の文字として扱われることを理解バックスラッシュのpython

>>> a='\' 
    File "<stdin>", line 1 
    a='\' 
     ^
SyntaxError: EOL while scanning string literal 


>>> a=r'\' 
    File "<stdin>", line 1 
    a=r'\' 
     ^
SyntaxError: EOL while scanning string literal 

を2文字と私はそれから1文字を削除しました。

>>> a='\\' 
>>> a 
'\\' 
>>> print a 
\ 
>>> repr(a) 
"'\\\\'" 

私の理解:他はそれをエスケープするために使用されている間、実際に単一\を含む文字列でa='\\'結果。なぜrepr(a)が非常に多くのバックスラッシュをもたらすのか理解できません。

>>> a=r'\\' 
>>> a 
'\\\\' 
>>> print a 
\\ 
>>> repr(a) 
"'\\\\\\\\'" 

私の理解:a=r'\\'は、二つの実際の\ sの文字列であり、その各々は、Python文字列として表現するために\が付いています。なぜカンフーは、インタープリタにaを書くだけで、4 \が返され、repr(a)が8 \を返すのか理解しています。

答えて

1
SyntaxError: EOL while scanning string literal 

文字列がレクサー処理された後に、生の文字列の取り扱いが行われます。 '\'は有効に覚えることができないので、生の文字列の一部として使用することはできません。それが返す文字列の

>>> repr(a) 

repr()ダブルスバックスラッシュ。表現の表現を表示しているので、バックスラッシュは4倍になります。

0

あなたは正しいです。接頭辞 'r'は文字列を生のままにします。しかし、 '\'だけが例外です。

repr 'オブジェクトの標準文字列表現を返します。'

関連する問題