为什么 str()+"" 比 ""+"" 慢

Pla*_*Tag 6 python

我想知道在 python 中创建一个空字符串以稍后附加更多字符串的最快方法是什么。然而,我发现,有趣的是它的方式更快地通过初始化字符串""str()。有人可以对此有所了解吗?我猜 str() 只是带来了很多开销,例如类型检查等。

这是我尝试过的:

%timeit ""+"a"
7.63 ns ± 0.0376 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)

%timeit str()+"a"
58.2 ns ± 0.253 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Run Code Online (Sandbox Code Playgroud)

Bor*_*ris 11

因为调用函数需要查找该函数并调用它。"" + "a"只能解释为"a"。使用dis

>>> import dis
>>> dis.dis("str() + 'a'")
  1           0 LOAD_NAME                0 (str)
              2 CALL_FUNCTION            0
              4 LOAD_CONST               0 ('a')
              6 BINARY_ADD
              8 RETURN_VALUE
>>> dis.dis("'' + 'a'")
  1           0 LOAD_CONST               0 ('a')
              2 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)