在python中,为什么s * 3比s + s + s更快?

时间:2015-07-08 14:01:07

标签: python string operators

我正在浏览google的python简介,并且发现s * 3s + s + s类型为s string更快的声明。

出现这种情况的原因是什么?

我用Google搜索并找到了which is faster s+='a' or s=s+'a' in python。但这并没有帮助

2 个答案:

答案 0 :(得分:18)

因为s * 3是一个操作,而s + s + s是两个操作;它真的是(s + s) + s,创建了一个额外的字符串对象,然后被丢弃。

您可以使用dis查看每个生成的字节码来查看差异:

s + s + s

  3           0 LOAD_FAST                0 (s)
              3 LOAD_FAST                0 (s)
              6 BINARY_ADD          
              7 LOAD_FAST                0 (s)
             10 BINARY_ADD          
             11 RETURN_VALUE    

s * 3

  3           0 LOAD_FAST                0 (s)
              3 LOAD_CONST               1 (3)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE    

答案 1 :(得分:3)

你也可以在这里自己测试一下:

import timeit

print(timeit.timeit("string=''; string='s'+'s'+'s'", number=10000))
print(timeit.timeit("string2=''; string2='s'*3", number=10000))

我的猜测是s*3将其视为一项操作,而将s+s+s视为两项操作。