我最近遇到下面这段代码。它看起来不正确,因为三重引号的单个实例,但似乎工作正常。任何人都可以解释这里发生了什么?python字符串串联混淆
return ("Validation failed(%s): cannot calculate length "
"of %s.""" % (self.name, value))`
我最近遇到下面这段代码。它看起来不正确,因为三重引号的单个实例,但似乎工作正常。任何人都可以解释这里发生了什么?python字符串串联混淆
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)
如果你可以修改代码,请注意%
语法格式字符串变得过时。您应该使用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))
这应该是一个注释,因为它实际上并没有回答这个问题 - 同样,由于原始代码中完全相同的字符串连接,所以不需要“+”。 – lvc
这是Python的string literal concatenation - 本质上,字符串直接旁边显示每个其他被解析为一个字符串:
>>> 'foo' 'bar'
'foobar'
在你的榜样,你有三个字符串字面量在一排(最后是""
,空字符串)以这种方式连接起来,而不是一个多行文字,该文字被终止但不是以三引号开头。
+1参考文档。 –
+1 2min更快 – Mualig
当然,没有人会写这样混淆的代码。我拒绝这个问题的前提! – Felix
因此,连接的字符串和最终的空字符串之间不需要空白区域,在代码中的几个地方重复(我可以发布一个怀疑费利克斯的链接),这只是糟糕的编码。 –