繁体   English   中英

变量查找:为什么**变量比变量慢得多

[英]Variable lookup: Why is ** with variables so much slower than with values

我读过math.sqrt**更快,今天我试过了。 但有趣的是,这两者之间的时差并不是**与变量和**与值之间的时差:

value1 = 10.1
value2 = 0.5
%timeit value1 ** value2
# 1000000 loops, best of 3: 645 ns per loop
%timeit 10.1 ** 0.5
# 10000000 loops, best of 3: 60.7 ns per loop

这快十倍了。 而对于数学函数,时序几乎相同(变量查找只需几个ns):

import math
%timeit math.sqrt(10.1)
# 1000000 loops, best of 3: 529 ns per loop
%timeit math.sqrt(value1)
# 1000000 loops, best of 3: 568 ns per loop

任何人都可以解释为什么变量查找对**产生如此巨大的差异,而它对math.sqrt几乎没有什么math.sqrt

设置:

  • python 3.5
  • Windows 10 64位

使用变量:

In [41]: def var():
   ....:     value1 ** value2
   ....:     

In [43]: dis.dis(var)
  2           0 LOAD_GLOBAL              0 (value1)
              3 LOAD_GLOBAL              1 (value2)
              6 BINARY_POWER
              7 POP_TOP
              8 LOAD_CONST               0 (None)
             11 RETURN_VALUE

使用立即值:

In [44]: def imm():
   ....:     10.1 ** 0.5
   ....:     

In [45]: dis.dis(imm)
  2           0 LOAD_CONST               3 (3.1780497164141406)
              3 POP_TOP
              4 LOAD_CONST               0 (None)
              7 RETURN_VALUE

事实证明,编译器超出了我们的预算并计算了功率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM