我正在浏览google的python简介,并且发现s * 3
比s + s + s
类型为s
string
更快的声明。
出现这种情况的原因是什么?
我用Google搜索并找到了which is faster s+='a' or s=s+'a' in python。但这并没有帮助
答案 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
视为两项操作。