在 Python 2.7 中使用加号 (+) 连接两个字符串是否合适,而不是用大括号 ({}) 和“格式”连接?

Is it ever appropriate to join two strings using the plus sign (+) over concatenating with curly brackets ({}) and `format` in Python 2.7?

我正在尝试编写简洁明了的代码,在我查看的大量代码中,有时我发现人们的代码不一致。我要问的是,有没有这样的例子

print("Cars on the road: " + cars)

比这个更合适

print("Cars on the road: {}".format(cars))

还是只是个人喜好问题?

你给出的两个例子在功能上的最大区别是,当你用+连接时,如果操作数右侧的对象不是字符串,操作将失败:

"abc" + object()

例如会导致以下情况:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'object' object to str implicitly

即使右边的对象实现了__str__方法也是如此:

class Foo:
    def __str__(self):
        return "str"

然而,使用格式将使用 __str__ 方法自动转换传递的参数:

"{}".format(Foo()) # "str"

在某些情况下,这种行为可能是不可取的或不必要的,例如当您只是将字符串文字与预期为字符串的对象连接时。

在所有其他情况下,我同意 post cited in the comments,它提供了很多很好的理由,说明为什么格式更符合惯用语,而且可能更有效。

如果您知道您正在处理简单的字符串,那么,是的,简单优于复杂。格式化功能很棒,类似于

“lit1” + var + “lit2” 

是一种明确的代码味道。

你的例子不是,基于模板的版本的额外复杂性是一种轻微的额外认知负担,会避免,或者至少不会努力,尽管使用模板广泛地。