2017-03-12 4 views
-1

なぜPythonのすべての文字列リテラルが一重引用符に評価されますか?なぜPythonのすべての文字列リテラルが一重引用符に評価されますか?

'a', "a", """a""" 

すべては、インターアクティブシェルに

'a' 

に評価されます。

+5

これらは**同じ**リテラルなので、引用符は文字列自体の一部ではありません。通訳者はあなたが文字列をどのように入力したのかわかりません。 –

+0

'' 'a' ''があなたに与えるものを見てください –

答えて

1

文字列の内容の表現を区別する必要があります。

リテラル'a'"a""""a"""すべてが同じ列を表します。つまり、その文字列を割り当てた後、次のようになります。

t = "a" 

Pythonは文字列の入力方法を覚えていません。さらに、文字列:

t = "a"+'b' 

結果の文字列は、'ab'ある:NO「オリジナルリテラル」は、単に存在しません。

これで、端末の変数(または式)を照会しました。端末は内部的にrepr(..)メソッドを呼び出します。だから、基本的に、あなたが書かれている:

repr("a") 

今、Pythonは__repr__メソッドを呼び出し、文字列内の単一引用符がある場合、その方法は、検査します。そうでない場合、文字列は一重引用符で表されます。そうでない場合は、二重引用符で表すことができます。たとえば、

>>> "'a'" 
"'a'" 
+0

repr(' a ')は' a 'を生成しませんか?新しい "ab"リテラルに加えて、 "a"と "b"はまだメモリに残っていますか? – pypyad

+0

@pypyad: 'repr( 'a')'は** content ''a'' **の文字列を生成し、' 'a'''と' 'b'''がメモリに残っているかどうかはPythonインタプリタが決定するものです。それは指定されていません。 –

1

すべてのUnicodeリテラルは''を使用して印刷されるわけではありません、ポイントでの場合、あなたはこれらを混ぜた場合、Pythonはそれを表現するために、適切な見積書を使用します。

>>> "'a'" 
"'a'" 

""" """ない(""オーバー''を選択するものは少ないので、見積もりが混在していない場合の判読は、おそらく非常に早い段階で行われた決定であり、その背後には重大な理由はありません。

Pythonは常に"'を選択し、"""時にそれができる以上の方:

>>> """'a'""" 
"'a'" 

とその背後に何の「特別な」理由はありません。

+1

Lol、正確に同じ反例を示しました:) –

関連する問題