【发布时间】:2014-04-10 09:12:13
【问题描述】:
我知道这可能不是问题,但我为 HPC 环境编写软件,所以这 3.5 倍的速度提升实际上有所作为。
In [1]: %timeit 10 / float(98765)
1000000 loops, best of 3: 313 ns per loop
In [2]: %timeit 10 / (98765 * 1.0)
10000000 loops, best of 3: 80.6 ns per loop
我使用dis 来查看代码,我认为float() 会更慢,因为它需要函数调用(不幸的是,我无法通过dis.dis(float) 看到它实际在做什么)。
我想第二个问题是什么时候应该使用float(n),什么时候应该使用n * 1.0?
【问题讨论】:
-
除了两个 dict 查找(全局和内置)和一个函数调用的区别之外,第二个可能会应用 constant folding。
-
如果没有显示更接近结果的常量折叠(即当我用变量替换
98765时),float仍然稍微慢一些。至于为什么你肯定要使用float是像float('1.0')这样的统一转换。
标签: python optimization python-internals