【问题标题】:Avoid IF statement after condition has been met满足条件后避免使用 IF 语句
【发布时间】:2011-02-01 01:39:14
【问题描述】:

我在一个重复多次的循环中有一个除法运算。碰巧的是,在前几次通过循环(或多或少的前 10 个循环)中,除数为零。一旦它获得价值,就不再可能出现 div by zero error。

我有一个if 条件来测试除数值以避免 div 为零,但我想知道评估此if 会对后续循环中的每次运行产生性能影响,尤其是因为我知道它已经没有用了。

这应该如何编码?在 Python 中?

【问题讨论】:

  • 如果您必须怀疑是否有性能影响,那么很可能没有性能影响。不要浪费您的时间来预测您在野外没有看到和衡量过的性能问题。

标签: python performance if-statement


【解决方案1】:

别担心。 if (a != 0) 很便宜。

另一种选择(如果你真的想要一个)可能是将循环分成两个,一旦除数得到它的值就退出第一个。但这听起来会使代码变得不必要地复杂(难以阅读)。

【讨论】:

  • +1:有可能的选项,但所有选项都会降低代码的可读性。只有在分析器表明该循环是对全局性能的主要影响之一之后,我才会考虑切换到它们。
【解决方案2】:

我支持 Thilo:我认为它应该很便宜。

如果您真的很在意,您应该对代码进行计时并确定轻微的开销是否不可接受。我怀疑不是。

【讨论】:

  • 这是评论而不是回答?
【解决方案3】:

我会将您的通话包装在 try/except 块中。它们在 python 中非常便宜,如果不引发异常,它们的成本大约与 pass 语句一样多。 Python 的设计目的是让您应该进行调用并解析任何错误,而不是总是请求许可。

示例代码:

def print_divide(x,y):
    try:
        print x/y
    except ZeroDivisionError:
        pass

【讨论】:

  • +1:使用 try:except 机制意味着您不会为每次迭代都背负 if 评估,尽管在除数为 0 的初始 10 左右之后的循环中。
  • 我认为应该为意外情况保留异常。当您知道除数在前几次迭代中将为 0 时,睁大眼睛遇到 ZeroDivisionError 似乎很奇怪。另外,try/except 真的比简单的 if 便宜吗?
  • 回复:“try/except 真的比简单的 if 便宜”。显然是:stackoverflow.com/questions/2522005/…
猜你喜欢
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 2023-03-25
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
相关资源
最近更新 更多