我最近遇到了以下一段代码。由于三引号的单个实例,它看起来无效,但似乎工作正常。谁能解释这里发生了什么?
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'
在您的示例中,您连续有三个字符串文字(最后一个是""
空字符串)以这种方式连接,而不是单个多行文字以三引号终止但不以三引号开头。
当您在多行上使用字符串时,您可以添加"
以使单行输出作为字符串首先连接。您可以将这一行解读为:
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))