2010-03-26 42 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

我與蒂洛:我認爲它應該是相當便宜。

如果你真的在意,你應該計算代碼,並確定輕微的開銷是否是不可接受的。我懷疑不是。

相關問題