在 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”
是一种明确的代码味道。
你的例子不是,基于模板的版本的额外复杂性是一种轻微的额外认知负担,我会避免,或者至少不会努力,尽管使用模板广泛地。
我正在尝试编写简洁明了的代码,在我查看的大量代码中,有时我发现人们的代码不一致。我要问的是,有没有这样的例子
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”
是一种明确的代码味道。
你的例子不是,基于模板的版本的额外复杂性是一种轻微的额外认知负担,我会避免,或者至少不会努力,尽管使用模板广泛地。