私は最近次のコードを見つけました。トリプルクォートの単一のインスタンスのために有効に見えませんが、うまくいくようです。誰でもここで何が起こっているのか説明できますか?Pythonの文字列の連結の混乱
return ("Validation failed(%s): cannot calculate length "
"of %s.""" % (self.name, value))`
私は最近次のコードを見つけました。トリプルクォートの単一のインスタンスのために有効に見えませんが、うまくいくようです。誰でもここで何が起こっているのか説明できますか?Pythonの文字列の連結の混乱
return ("Validation failed(%s): cannot calculate length "
"of %s.""" % (self.name, value))`
すべての文字列が最初に連結されます。
""
は空の文字列です。
次に、置換が行われる。
複数の行に文字列を使用する場合は、"
を追加して、文字列として1行の出力を最初に連結することができます。あなたは、コードを変更することができた場合は、文字列をフォーマットする%
構文は時代遅れになってきていることに注意し、
return ("Validation failed(%s): cannot calculate length " //1st line
"of %s." //2nd line
"" % (self.name, value)) //3rd line (empty)
:あなたは、ラインを読むことができます。それは複数行にまたがるする必要がある場合
return "Validation failed({0}): cannot calculate length of {1}.".format(self.name, value)
、使用: - 基本的に、文字列リテラルは、それぞれの隣に直接表示される
return ("Validation failed({0}): " +
"cannot calculate length of {1}.".format(self.name, value))
これはコメントでなければなりません。なぜなら、元のコードとまったく同じ文字列のリテラル連結のために、実際には質問に答えることはなく、 '+'は必要ないからです。 – lvc
これは、Pythonのstring literal concatenationがあるのPythonのバージョンがそれをサポートしている場合は、str.format()
を使用する必要があります他の1つの文字列として解析されます:あなたの例では
>>> 'foo' 'bar'
'foobar'
、あなたは最後です(行の3つの文字列リテラルを持って""
、空の文字列)が終了していて、三重引用符で始まっていない単一の複数行リテラルではなく、この方法で連結されています。
+1を参照してください。 –
+1 2分速い – Mualig
誰もそのような混乱したコードを書くことはありませんでした。私はその質問の前提を拒否する! – Felix
連結された文字列と最後の空の文字列の間に空白は必要なく、コード内のいくつかの場所で繰り返されます(疑わしいFelixのリンクを投稿することができます)。 –