我最近遇到了以下一段代码。由于三重引号的单个实例,它看起来不合适,但似乎工作正常。谁能解释一下这里发生了什么?
return ("Validation failed(%s): cannot calculate length "
"of %s.""" % (self.name, value))`
答案 0 :(得分:9)
首先连接所有字符串。
""
是一个空字符串。
然后进行替换。
答案 1 :(得分:4)
这是Python的string literal concatenation - 本质上,直接出现在彼此旁边的字符串文字被解析为单个字符串:
>>> 'foo' 'bar'
'foobar'
在您的示例中,连续三个字符串文字(最后一个是""
,空字符串)以这种方式连接,而不是一个终止但不以三元组开头的单行文字引号。
答案 2 :(得分:1)
在多行上使用String时,可以添加"
以使单行输出,因为字符串首先连接。您可以将该行读作:
return ("Validation failed(%s): cannot calculate length " //1st line
"of %s." //2nd line
"" % (self.name, value)) //3rd line (empty)
答案 3 :(得分:0)
如果您可以修改代码,请注意格式化字符串的%
语法正在变得过时。如果你的Python版本支持它,你应该使用str.format()
:
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))