9

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

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

4 回答 4

9

首先连接所有字符串。

""是一个空字符串。

然后进行替换。

于 2012-06-22T08:05:19.100 回答
4

这是 Python 的字符串文字连接——本质上,直接出现在彼此旁边的字符串文字被解析为单个字符串:

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

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

于 2012-06-22T08:11:35.507 回答
1

当您在多行上使用字符串时,您可以添加"以使单行输出作为字符串首先连接。您可以将这一行解读为:

return ("Validation failed(%s): cannot calculate length " //1st line
    "of %s." //2nd line
    "" % (self.name, value)) //3rd line (empty)
于 2012-06-22T08:07:27.190 回答
0

如果您可以修改代码,请注意%格式化字符串的语法已经过时。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))
于 2012-06-22T08:11:01.100 回答