2016-03-27 16 views
0

對於可以用兩種「種類」參數調用的函數,Python中的最佳實踐是什麼?可以用兩種不同方式調用函數的Python最佳實踐

舉個例子,我有一個功能run_fit,可以採取一個radius參數,適合在半徑所有點或可以採取region參數,適合在所有點自定義region

應該radiusregion是關鍵詞的參數嗎?即使總是需要一個?

問我的問題的另一種方式是:有沒有辦法捕捉這樣一個事實,即不需要論證,但至少必須提供一個參數?

+0

也許你可以帶兩個參數,一個是你傳入的參數,另一個是你傳入的參數的布爾代表? – Natecat

回答

1

是的,使用關鍵字參數,然後使用斷言來確保傳遞正確的參數組合。

def run_fit(radius=None, region=None): 
    if not radius and not region: 
     raise AssertionError("Supply either radius or region") 
    if radius and region: 
     raise AssertionError("Only supply one of radius and region") 

你也可以直接寫斷言:

assert radius or region, "Supply either radius or region" 
assert not (radius and region), "Only supply one of radius or region" 

但我個人認爲第一個版本是更具可讀性。

0

這個問題不僅僅適用於python編程,它可以應用於任何編程。如果一個函數做了兩個不同的事情,比如擬合一個半徑和擬合一個區域,最好將函數分成兩個不同的函數,並給每個類似fit_raidus和fit_region的名稱賦予更有意義的名稱,而不是像run_fit這樣的通用名稱。