我浏览了谷歌的python简介,发现s * 3比s + s + s更快,而s是string类型的。
有什么原因吗?
我在谷歌上搜索发现了which is faster s+='a' or s=s+'a' in python。但这并没有帮助
发布于 2015-07-08 14:05:03
因为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 发布于 2015-07-08 14:05:11
您也可以在这里亲自测试:
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则是两个操作。
https://stackoverflow.com/questions/31295017
复制相似问题