出于好奇,我只是在测试不同字符串连接/替换方法的速度。关于这个主题的谷歌搜索把我带到了这里。我想我会发布我的测试结果,希望它可以帮助某人做出决定。
import timeit
def percent_():
return "test %s, with number %s" % (1,2)
def format_():
return "test {}, with number {}".format(1,2)
def format2_():
return "test {1}, with number {0}".format(2,1)
def concat_():
return "test " + str(1) + ", with number " + str(2)
def dotimers(func_list):
# runs a single test for all functions in the list
for func in func_list:
tmr = timeit.Timer(func)
res = tmr.timeit()
print "test " + func.func_name + ": " + str(res)
def runtests(func_list, runs=5):
# runs multiple tests for all functions in the list
for i in range(runs):
print "----------- TEST #" + str(i + 1)
dotimers(func_list)
...运行后runtests((percent_, format_, format2_, concat_), runs=5)
,我发现 % 方法在这些小字符串上的速度大约是其他方法的两倍。concat 方法总是最慢的(几乎没有)。在方法中切换位置时存在非常微小的差异format()
,但切换位置总是比常规格式方法慢至少 0.01。
测试结果样本:
test concat_() : 0.62 (0.61 to 0.63)
test format_() : 0.56 (consistently 0.56)
test format2_() : 0.58 (0.57 to 0.59)
test percent_() : 0.34 (0.33 to 0.35)
我运行这些是因为我确实在我的脚本中使用了字符串连接,我想知道成本是多少。我以不同的顺序运行它们,以确保没有任何干扰,或者首先或最后获得更好的性能。附带说明一下,我在这些函数中加入了一些更长的字符串生成器,例如"%s" + ("a" * 1024)
,常规 concat 的速度几乎是使用format
and%
方法的 3 倍(1.1 对 2.8)。我想这取决于字符串以及您要实现的目标。如果性能真的很重要,那么尝试不同的东西并测试它们可能会更好。我倾向于选择可读性而不是速度,除非速度成为问题,但这只是我。所以不喜欢我的复制/粘贴,我必须在所有内容上放置 8 个空格以使其看起来正确。我一般用4。