是多次乘法还是更快地分配给变量?

Is doing multiplication multiple times or assigning to a variable faster?

假设我有这个代码:

foo = int(input("Number"))
bar = int(input("Number"))
for number in range(0, 10):
    if foo*bar > 0:
        print("hello")

但是,我也可以得到这个代码:

foo = int(input("Number"))
bar = int(input("Number"))
top = foo*bar
for number in range(0, 10):
    if top > 0:
        print("hello")

哪个更快?

使用Python 3.


我意识到 this 的问题很相似,但是,它是针对 Java 的,Python 可能有所不同。另外,他们问的是内存效率,而我问的是处理器效率。

这样我们就可以结束这一切了,这里是答案。在我的电脑上使用 timeit 我们得到的结果是...

每次都在循环中做乘法:

$ python -m timeit 'for _ in xrange(10): 10 * 20 > 0'
1000000 loops, best of 3: 1.3 usec per loop

在循环外做乘法:

$ python -m timeit 'foo = 10 * 20
> for _ in xrange(10): foo > 0'
1000000 loops, best of 3: 1.07 usec per loop

运行 循环外而不是循环内的乘法为我们节省了 0.23 微秒 - 大约 18%。

请注意,我在 2007 iMac (2.4 GHz) 运行 OS X 10.11.0,开发者预览版 7 上使用 Python 2.7.10。您的确切结果可能因 Python 版本、硬件、OS 版本、CPU... 其他应用程序而异 运行(在我的例子中只有 Safari 有 3 个选项卡)。但是你应该比较地看到,与重复执行相同的操作并每次都丢弃结果相比,将数字存储在变量中是微不足道的。

以后OP请用timeit。它内置了 Python 用于像这样进行性能检查。请参阅此处的文档:https://docs.python.org/3/library/timeit.html(关于这一点,不要害怕文档。阅读它们。如果您有任何疑问,请在 Stack Overflow 上询问他们 - 您可能会在文档中需要的地方揭示缺点improved/clarified。或者至少,你的问题会得到解答,之后你会比以前知道更多。)