2016-02-24 49 views
-2

假設我有以下功能 -實現同一功能的不同版本的最佳方式是什麼?

def add(a, b): 
    if isinstance(a, (float,int)) and isinstance(b, (float,int)): 
     return (a+b) 
    else: 
     raise TypeError("Invalid Parameters") 

現在,這個功能是在兩種情況下使用 -

我)當用戶呼叫,並可能給比float或real其他輸入。 ii)當內部使用函數(很多次)時,我完全確定輸入參數只能是int或float。

如何在內部使用函數時避免無用的類型檢查?

或者, 什麼是寫作的最佳方式,上述功能和以下功能作爲單一功能?

def add(a, b): 
    return (a+b) 

上述功能很簡單,但可能會出現檢查次數和功能相當大的情況。在這種情況下,我怎樣避免兩次寫同一個函數?

+1

類型檢查有什麼問題? – Alex

+0

當有許多不需要的檢查時,它們會在複雜情況下導致不必要的開銷,但我確信輸入有效。 –

+1

我想你*可以*添加第三個可選參數。如果您不想進行錯誤檢查,請使用True調用它,但默認值爲False? – zondo

回答

3

一種方法可能是必須根據用例使用函數,以防由於其他原因而無法依賴try/catch模式(但如果可以,我會提示它):

def add_check(a, b): 
    if isinstance(a, (float, int)) and isinstance(b, (float, int)): 
     return add(a, b) 

def add(a, b): 
    return (a+b) 

如果你只是想要一個功能,您就必須以某種方式告訴它何時做檢查,何時不,也許是一個額外的參數:

def add(a, b, type_check=False): 
    if type_check: 
     if not isinstance(a, (float, int)) or not isinstance(b, (float, int)): 
      raise TypeError("Invalid Parameters") 
    return add(a, b) 
+0

這是整個問題。我怎樣才能避免兩次寫同一個函數? –

+0

@YashuSeth如果你只想要一個函數,你必須告訴它它是否應該執行額外的檢查或不以某種方式。我用這樣的例子更新了答案。 – olofom

+0

@oloform我明白了,現在我認爲這是做到這一點的唯一更好的方法。 –

1

保留功能,則使用只需+當你不需要或想要類型檢查。

i)當用戶調用它並可能給出的輸入不是浮點數或實數。

使用c = add(a, b)

II)在函數內部(多次使用),我完全確定的輸入參數就只能是整數或浮點數。

使用c = a + b

你只需要編寫一個功能和更多的開銷不超過incurre絕對必要的。

+0

您可以請一個例子來闡述一下嗎? –

+0

add函數只是一個例子。如果該功能與多種類型檢查相比很複雜呢? –

+1

然後問題太廣泛了。答案取決於功能和使用模式。 – Goyo

相關問題