【问题标题】:Is doing multiplication multiple times or assigning to a variable faster?是多次乘法还是更快地分配给变量?
【发布时间】:2015-11-16 14:43:28
【问题描述】:

假设我有这个代码:

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 3 这会导致 TypeError,您不能将字符串相乘。除此之外,在慢速显示上,first 会更快,因为它会少打印一个 Hello。
  • 那你为什么不显示代码,这是正确的,更现实的?
  • 我经常看到这个。有人问像 ++i 比 i++ 快,如果它有什么不同的话就像一纳秒,他们在循环中使用print 语句来做毫秒。所以print 占用了 99.99999% 的时间,但他们没有想到这一点。他们专注于蚊蚋的睫毛。

标签: python performance python-3.x processing-efficiency


【解决方案1】:

只是为了让我们可以结束这一切,这就是答案。在我的电脑上使用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%。

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

以后,OP,请使用timeit。它内置在 Python 中,可以像这样进行性能检查。请参阅此处的文档:https://docs.python.org/3/library/timeit.html(在该说明中,不要害怕文档。阅读它们。如果您有任何问题,请在 Stack Overflow 上提问 - 您可能会在文档中发现需要改进/澄清的缺陷. 或者至少,你的问题会得到解答,之后你会比以前知道更多。)

【讨论】:

  • 我真的不应该一开始就问,因为答案很直观,但我想我想知道也许不是。我并不害怕文档,因为我倾向于发现它们难以阅读,而且我的错误是先在这里发布而不是四处张望。 Timeit 似乎很有用——我刚刚在这个问题上对其进行了测试,结果似乎没有定论,但这与问题的这种状态无关。总的来说,我的代表被这个问题伤害了,但我学到了一些。所以谢谢你们,谢谢你们做测试并完成这个。
猜你喜欢
  • 2020-01-09
  • 2013-01-02
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多