最近、次のコードに出くわしました。三重引用符の単一インスタンスのため有効に見えませんが、正常に動作するようです。ここで何が起こっているのか誰か説明できますか?
return ("Validation failed(%s): cannot calculate length "
"of %s.""" % (self.name, value))`
最近、次のコードに出くわしました。三重引用符の単一インスタンスのため有効に見えませんが、正常に動作するようです。ここで何が起こっているのか誰か説明できますか?
return ("Validation failed(%s): cannot calculate length "
"of %s.""" % (self.name, value))`
すべての文字列が最初に連結されます。
""
空文字列です。
その後、置換が行われます。
これはPythonの文字列リテラルの連結です。基本的に、互いに直接隣接して表示される文字列リテラルは、単一の文字列として解析されます。
>>> 'foo' 'bar'
'foobar'
あなたの例では、3つの文字列リテラル(最後は""
、空の文字列)がこのように連結されています。これは、終了するが三重引用符で始まらない単一の複数行リテラルではありません。
"
複数の行で文字列を使用する場合、最初に文字列が連結されるため、単一行の出力を追加できます。この行は次のように読むことができます。
return ("Validation failed(%s): cannot calculate length " //1st line
"of %s." //2nd line
"" % (self.name, value)) //3rd line (empty)
コードを変更できる場合は、%
文字列をフォーマットするための構文が時代遅れになっていることに注意してください。str.format()
お使いの Python のバージョンがサポートしている場合は、次を使用する必要があります。
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))