2015-12-08 5 views
8
文字列リテラルの連結の次の二つの変種(間のプラス記号の有無にかかわらず)のうち

文字列連結の変形ですか?

  • 好ましい方法は何ですか?
  • 違いは何ですか?
  • いつどちらか一方を使用する必要がありますか?
  • これらのうちのどれを使用してはいけないのでしょうか?
  • joinが好ましいですか?

コード:

>>> # variant 1. Plus 
>>> 'A'+'B' 
'AB' 
>>> # variant 2. Just a blank space 
>>> 'A' 'B' 
'AB' 
>>> # They seems to be both equal 
>>> 'A'+'B' == 'A' 'B' 
True 
+2

これは文字列*リテラル*連結です。 –

+0

文字列リテラルでは、並置と '+'演算子の使用に違いはありません。変数では、並置はオプションではありません。 – khelwood

+0

https://lwn.net/Articles/551426/ – UlfR

答えて

13

並置は、文字列リテラルでのみ動作します:

>>> 'A' 'B' 
'AB' 

あなたは文字列オブジェクトで作業する場合:

>>> a = 'A' 
>>> b = 'B' 

はあなたが別のメソッドを使用する必要があります:

>>> a b 
    a b 
    ^
SyntaxError: invalid syntax 

>>> a + b 
'AB' 

+は、単にリテラルを並べて配置するよりもはっきりしています。第一の方法の

1つの用途は、ソースコード内 インデントを保つ、複数行にわたる長いテキストを分割することである。

>>> a = 5 
>>> if a == 5: 
    text = ('This is a long string' 
      ' that I can continue on the next line.') 
>>> text 
'This is a long string that I can continue on the next line.' 

''join()がリストに、例えば、より多くの文字列を連結するための好ましい方法です。

>>> ''.join(['A', 'B', 'C', 'D']) 
'ABCD' 
1

+のないバリアントは、コードの構文解析中に実行されます。私はそれはあなたがあなたのコード内でよりよい複数行の文字列を書いてみましょうするために行われたと思いますので、あなたが行うことができます。

test = "This is a line that is " \ 
     "too long to fit nicely on the screen." 

私はそれが可能だとき、あなたはnon-+バージョンを使用する必要があることを推測し、バイトコードにありますので、結果の文字列だけになり、連結の記号は残されません。

+を使用すると、コードに2つの文字列があり、実行時に連結を実行します(インタプリタがスマートで最適化されていない限り、連結しているかどうかわかりません)。

明らか

、あなたが行うことはできません。高速で1 = '' BAは= 'B'

no-+バージョンは、スクリプトを実行する前に実行されるためです。

+ vs join - >多くの要素がある場合は、多くの要素を処理するように最適化されているため、joinが優先されます。複数の文字列を連結するために+を使用すると、プロセスメモリには多くの部分的な結果が生成されますが、joinを使用しては生成されません。

2つの要素を連結するとすれば、+はより読みやすくなっていると思います。

+0

「あまりにも長い」 - これは有効な構文ではありません –

+0

はい、あなたは正しいよ、私は忘れてしまった\ – Maciek