python字符串连接混淆

python字符串连接混淆,python,Python,我最近遇到了以下代码。因为只有一个三重引号的实例,所以它看起来是无效的,但似乎可以正常工作。有人能解释一下这是怎么回事吗 return ("Validation failed(%s): cannot calculate length " "of %s.""" % (self.name, value))` 首先连接所有字符串 “是一个空字符串 然后进行替换。当您在多行上使用字符串时,您可以添加“以使单行输出,因为字符串是先串联的。您可以将该行读取为: return ("Valid

我最近遇到了以下代码。因为只有一个三重引号的实例,所以它看起来是无效的,但似乎可以正常工作。有人能解释一下这是怎么回事吗

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

首先连接所有字符串

“是一个空字符串


然后进行替换。

当您在多行上使用字符串时,您可以添加
以使单行输出,因为字符串是先串联的。您可以将该行读取为:

return ("Validation failed(%s): cannot calculate length " //1st line
    "of %s." //2nd line
    "" % (self.name, value)) //3rd line (empty)

如果可以修改代码,请注意格式化字符串的
%
语法已过时。如果您的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))
这是Python的-本质上,直接相邻出现的字符串文本被解析为单个字符串:

>>> 'foo' 'bar'
'foobar'

在您的示例中,一行中有三个字符串文字(最后一个是
,空字符串)以这种方式连接,而不是以三个引号结尾但不以三个引号开头的单个多行文字。

这应该是一个注释,因为它实际上没有回答问题-而且,不需要使用
+
,因为原始代码中完全相同的字符串文字连接。肯定没有人会编写如此混乱的代码。我拒绝这个问题的前提!因此,在连接的字符串和最终的空字符串之间不需要空格,在代码中的几个地方重复(我可以为怀疑的Felix发布一个链接),这就是糟糕的编码。