之间有什么区别吗?
str_ = "foo" + "bar"
和
str_ = "{:s}{:s}".format("foo","bar")
还是只是偏好?
答案 0 :(得分:2)
在语义上?不,两人最终加入"foo"
和"bar"
并将其分配给str
。
计算?当然,Python会在编译期间为"foobar"
创建文字,str = "foo" + "bar"
赋值会更快。
从可读性方面来看?同样,str = "foo" + "bar"
肯定会更清晰简洁。
您的示例中的常见勘误表示您正在分配str
这是一个内置名称,所以请不要屏蔽它。
答案 1 :(得分:2)
如果你想看到实际差异:
import dis
def concat():
return 'foo' + 'bar'
def format():
return '{}{}'.format('foo', 'bar')
dis.dis(concat)
print('*'*80)
dis.dis(format)
答案 2 :(得分:1)
要完成@Jim解释,这里有一个基准测试,显示两种方法之间的比较:
# measure execution time
import timeit
def f1(num_iterations):
for i in range(num_iterations):
value = "foo" + "bar"
def f2(num_iterations):
for i in range(num_iterations):
value = "{:s}{:s}".format("foo", "bar")
N = 100000000
print timeit.timeit('f1(N)', setup='from __main__ import f1, N', number=1)
print timeit.timeit('f2(N)', setup='from __main__ import f2, N', number=1)
我的笔记本电脑的结果给出:f1 = 4.49492255239s和f2 = 47.5562411453s
因此,当N大时使用格式的结论将比使用更简单的str级联版本慢得多。
答案 3 :(得分:0)
关于Jim回答,使用+
运算符使用多个字符串,可能会很慢。
避免做这样的事情:
s = ' '
for p in parts:
s += p
每个+=
操作都会创建一个新字符串。为避免这种情况,请使用join()
。
' '.join(parts)
在您的示例中,您不需要使用+
。只需将它们放在彼此相邻的位置即可。
string = 'foo' 'bar'
print(string)
>"foobar"