[英]Python -- optional arguments for a function
假設我想構建一個函數,將兩個數字a
和b
相加,或者將它們相減並添加第三個數字c
並減去第四個數字d
。 我打算指定兩個操作中的哪一個將由參數sum
執行; 如果為True
,則執行第一個操作,如果為False
,則執行第二個操作。 我會這樣寫:
def f(a, b, c, d, sum=True):
if sum: return a+b
else: return a-b+c-d
例如, f(1,2,3,4)
返回3
,而f(1,2,3,4,sum=False)
返回-2
,正如預期的那樣。 顯然, c
和d
只需要在sum=False
時定義。 我該怎么做呢? 我已經嘗試將c
和d
設置為 *args,但我不斷收到“不支持的操作數”或“位置參數跟隨關鍵字參數”類型的錯誤。
對 c 和 d 使用None
的默認值:
def f(a, b, c=None, d=None, sum=True):
if sum:
return a+b
else:
return a-b+c-d
這還允許您將錯誤檢查邏輯添加到您的函數中 - 當 sum 為 False 時檢查 c 和 d 是否存在:
def f(a, b, c=None, d=None, sum=True):
if sum:
return a+b
else:
if None in (c, d):
raise TypeError('f requires c and d args with parameter sum=False')
return a-b+c-d
其他人已經給出了你可以做到的方法,但在更基本的層面上,我會問為什么這甚至是相同的方法? 在我看來,您在這里有兩種不同的方法,f_sum 和 f(或其他),一個需要兩個參數,另一個需要 4。
或者,如果它是一個更復雜的操作並且 c 和 d 只是附加參數/屬性,您可以將它們默認為任何空值,例如,對於加法,只需將它們默認為 0:
def f(a, b, c=0, d=0)
抱歉錯過了第二種情況是 a a+b-0+0
不會做任何事情,所以如果不提供這些參數,結果將與 a+b 相同,甚至不需要條件或魔法標志。
-
b 並將其誤讀為 +
你的問題的答案是:
def f(a, b, c=None, d=None, sum=True):
if sum: return a + b
else: return a - b + c - d
但是,您可以將其進一步簡化為:
def f(a, b, c=0, d=0):
return a - b + c - d
因為 c 和 d 的值取決於sum
是真還是假。
這可以解決您的問題:
def f(a, b, c=0, d=0, sum=True):
if sum: return a+b
else: return a-b+c-d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.