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

Tas*_*man 3 python string operators

我正在浏览谷歌的python介绍并且遇到了s * 3比在类型的s + s + s地方更快的声明.sstring

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

我用Google搜索并发现python中的s + ='a'或s = s +'a'更快.但这没有帮助

jon*_*rpe 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    
Run Code Online (Sandbox Code Playgroud)

s * 3:

  3           0 LOAD_FAST                0 (s)
              3 LOAD_CONST               1 (3)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE    
Run Code Online (Sandbox Code Playgroud)