我正在学习谷歌的Python入门课程,看到了这样一条语句:
我进行了搜索,并在Stack Overflow找到了相关信息。但是这并没有解决问题。请帮我解释一下。
s * 3
比使用s + s + s
更快,其中s
是string
类型。你知道原因吗?我进行了搜索,并在Stack Overflow找到了相关信息。但是这并没有解决问题。请帮我解释一下。
s * 3
比使用s + s + s
更快,其中s
是string
类型。你知道原因吗?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
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
的两个操作。关于这点,我并不确定是否正确。