连接字符串:str + str或“{:s} {:s}”。format()?

时间:2016-08-16 21:18:20

标签: python string python-3.x

之间有什么区别吗?
str_ = "foo" + "bar"

str_ = "{:s}{:s}".format("foo","bar")

还是只是偏好?

4 个答案:

答案 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"