2010-03-26 77 views
4

我在一个重复多次的循环中有一个除法运算。恰巧在通过循环的前几个循环(或多或少的前10个循环)中,除数为零。一旦它获得了价值,零差错不再是可能的。在条件得到满足之后避免IF语句

我有一个if条件,以便通过零避免div来测试除数值,但我想知道,有一个性能的影响,在评价这if将在后续的循环每次运行,特别是因为我知道这是没有用的了。

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

+3

如果你不得不怀疑是否有性能的影响,则很可能是没有性能影响。不要浪费时间来预测你从未见过的性能问题,并在野外测量自己。 – 2010-03-26 09:24:50

回答

5

我会把你的电话打包在try/except块中。它们在python中非常便宜,并且如果不抛出异常,其成本大约与通过语句相当。 Python的设计是为了让你打电话和解析任何错误,而不是总是要求许可。

示例代码:

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

+1:使用try:except机制意味着你没有对每次迭代都进行if评估,尽管在除数为0的初始10左右之后的循环。 – 2010-03-26 07:18:20

+2

我认为异常应该保留用于意外情况。当你知道在前几次迭代中除数为0时,你会惊讶地发现ZeroDivisionError看起来很奇怪。此外,是一个尝试/除了真的比简单的便宜? – Thilo 2010-03-26 08:43:40

+1

回复:“试试/除了真的比简单如果便宜”。显然它是:http://stackoverflow.com/questions/2522005/cost-of-exception-handlers-in-python – Thilo 2010-03-26 09:17:16

9

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

替代方案(如果您确实需要)可以将环分为两部分,一旦除数获得其值,则退出第一部分。但这听起来像会使代码不必要地复杂(难以阅读)。

+1

+1:有可能的选项,但所有这些选项都会使代码更不可读。我认为只有在剖析者指出这个循环是全球性能的主要热门之一后,才会考虑切换它们。 – 2010-03-26 07:07:33

1

我与蒂洛:我认为它应该是相当便宜。

如果你真的在意,你应该计算代码,并确定轻微的开销是否是不可接受的。我怀疑不是。