我只是出于好奇而测试了不同的字符串连接/替换方法的速度。谷歌搜索该主题将我带到这里。我以为我会发布测试结果,希望它可以帮助某人做出决定。
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 %
方法的三倍(1.1 vs 2.8)。我想这取决于字符串以及您要实现的目标。如果性能确实很重要,那么尝试不同的东西并进行测试可能会更好。除非速度成为问题,否则我倾向于选择可读性而不是速度,但这就是我。所以不喜欢我的复制/粘贴,我必须在所有内容上放置8个空格以使其看起来正确。我通常使用4。