【问题标题】:Faster "if" statements更快的“if”语句
【发布时间】:2017-04-18 19:27:42
【问题描述】:

我有一个关于在 python 中计算速度更快的问题。 这是一个大型模拟,所以任何节省时间的小事都会有所帮助。

据我了解,当 python 评估带有“或”的“if”语句时,如果第一个条件为真,它不会打扰第二个条件。

这里我想检查一个随机生成的介于 0 和 1 之间的浮点数是否小于某个指数因子。

if random() < exp(a-b):
   do_things()

那么在这种情况下,当第二个条件暗示第一个条件时,是否值得做逻辑上冗余的“if”语句,但第一个条件可能计算得更快?

if a > b or random() < exp(a-b):
  do_things()

这是否会更快,甚至更重要?任何意见表示赞赏,谢谢!

【问题讨论】:

  • 您可以基于此方法用简短的示例测试执行时间:stackoverflow.com/questions/1557571/…
  • 为什么不计时,自己看看呢? IPython 有 %timeit 魔法命令,Python 有 timeit 可以使用:docs.python.org/3/library/timeit.html
  • 而不是张贴...你为什么不直接测量? (docs.python.org/2/library/timeit.html)
  • “这是一个大型模拟,所以任何节省时间的小事都会有所帮助。”也许是时候考虑在这部分代码中不使用 Python 了? Python 是一门很棒的语言,但如果性能是您的瓶颈,您可能需要将计算方法更改为其他方法。
  • 如果您正在尝试优化一段较大的代码,请确保您首先进行概要分析,以确保您将精力集中在那些重要的领域。

标签: python performance if-statement performance-testing execution-time


【解决方案1】:

这意味着对于 (a and b and c),如果 a 为假,则 b 或 c 将不再被测试。

类似地,如果您有一个 OR 表达式(a 或 b)并且 a 为真,则永远不会计算 b。

总而言之,子句不会因分离而更快失败..

不用担心性能,担心可读性....谢谢

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2016-11-20
    相关资源
    最近更新 更多