對於可以用兩種「種類」參數調用的函數,Python中的最佳實踐是什麼?可以用兩種不同方式調用函數的Python最佳實踐
舉個例子,我有一個功能run_fit
,可以採取一個radius
參數,適合在半徑所有點或可以採取region
參數,適合在所有點自定義region
。
應該radius
和region
是關鍵詞的參數嗎?即使總是需要一個?
問我的問題的另一種方式是:有沒有辦法捕捉這樣一個事實,即不需要論證,但至少必須提供一個參數?
對於可以用兩種「種類」參數調用的函數,Python中的最佳實踐是什麼?可以用兩種不同方式調用函數的Python最佳實踐
舉個例子,我有一個功能run_fit
,可以採取一個radius
參數,適合在半徑所有點或可以採取region
參數,適合在所有點自定義region
。
應該radius
和region
是關鍵詞的參數嗎?即使總是需要一個?
問我的問題的另一種方式是:有沒有辦法捕捉這樣一個事實,即不需要論證,但至少必須提供一個參數?
是的,使用關鍵字參數,然後使用斷言來確保傳遞正確的參數組合。
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"
但我個人認爲第一個版本是更具可讀性。
這個問題不僅僅適用於python編程,它可以應用於任何編程。如果一個函數做了兩個不同的事情,比如擬合一個半徑和擬合一個區域,最好將函數分成兩個不同的函數,並給每個類似fit_raidus和fit_region的名稱賦予更有意義的名稱,而不是像run_fit這樣的通用名稱。
也許你可以帶兩個參數,一個是你傳入的參數,另一個是你傳入的參數的布爾代表? – Natecat