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

3
我正在学习谷歌的Python入门课程,看到了这样一条语句:s * 3比使用s + s + s更快,其中sstring类型。你知道原因吗?
我进行了搜索,并在Stack Overflow找到了相关信息。但是这并没有解决问题。请帮我解释一下。

我认为前者是一个单独的特定操作,而后者由两个单独的操作组成,第二个操作将执行第一个操作已经完成的任务(例如检查字符串)。 - Pynchia
2个回答

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    

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 的两个操作。关于这点,我并不确定是否正确。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接