python字符串连接混淆

时间:2012-06-22 08:02:27

标签: python

我最近遇到了以下一段代码。由于三重引号的单个实例,它看起来不合适,但似乎工作正常。谁能解释一下这里发生了什么?

return ("Validation failed(%s): cannot calculate length "
        "of %s.""" % (self.name, value))`

4 个答案:

答案 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))