簡體   English   中英

Python——函數的可選參數

[英]Python -- optional arguments for a function

假設我想構建一個函數,將兩個數字ab相加,或者將它們相減並添加第三個數字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 ,正如預期的那樣。 顯然, cd只需要在sum=False時定義。 我該怎么做呢? 我已經嘗試將cd設置為 *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+b-0+0不會做任何事情,所以如果不提供這些參數,結果將與 a+b 相同,甚至不需要條件或魔法標志。 抱歉錯過了第二種情況是 a - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM