在Python 2.7中使用加号(+)连接大括号({})和`format`是否合适?

Cra*_*aig 5 python string concatenation string-formatting python-2.7

我正在尝试编写干净简洁的代码,并且在很多代码中,我看到有时候我看到人们的代码不一致.我问的是,有没有这样的实例

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

比这更合适

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

或者只是一个偏好的问题?

Mat*_*ory 6

您给出的两个示例之间的最大功能差异在于,当您连接时+,如果操作数右侧的对象不是字符串,则操作将失败:

"abc" + object()
Run Code Online (Sandbox Code Playgroud)

例如,将导致以下情况:

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

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

class Foo:
    def __str__(self):
        return "str"
Run Code Online (Sandbox Code Playgroud)

但是,使用格式将使用以下__str__方法自动转换传递的参数:

"{}".format(Foo()) # "str"
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这种行为可能不合适或不必要,例如,当您简单地将字符串文字与预期为字符串的对象连接时.

在所有其他情况下,我同意评论引用帖子,这些帖子提供了很多理由,为什么格式化更具惯用性并且可能更有效.