2017-06-06 155 views
-3

我想使用參數的默認值,但在調用中包含其名稱。我認爲將參數設置爲None會做到這一點,但事實並非如此。如何傳遞參數作爲默認參數?

例如:

def a(num=3): 
    print(num) 

a(num=None) #returns "None", not "3" like I want it to. 

如何使用一個命名參數的默認值,同時包括它在呼叫? (它甚至有可能?)

只是爲了解釋爲什麼我會想要做這樣的事情(因爲,也許這是在我的整個編碼風格的問題):

我時常有這樣的代碼

def add(num, numToAdd=1): 
    return num+numToAdd 

def addTwice(num, numToAdd=None): 
    for i in range(2): 
     num=add(num, numToAdd=numToAdd) 
    return num 

addTwice(3) #throws an error instead of returning 5 

我想要的是addTwicenumToAdd始終使用默認值addnumToAdd,無論它是什麼。

原因:也許在後面的代碼,我意識到這是更好地執行add時相比,它是添加1

添加2作爲默認所以我將其更改爲

def add(num, numToAdd=2): 
     return num+numToAdd 

但,除非我總能在addTwice中指定使用缺省值(如果它接收到默認值),否則這將無濟於事。

所以,這是理由。換句話說:我有一個函數(第一個函數)調用另一個函數(第二個函數),並且如果第一個函數必須使用默認值,我希望它默認爲默認值在第二個功能上。這樣,我只需要更改第二個函數的默認值(不是每個函數都調用它)以更改默認功能。

+2

如果包含默認參數,則不必在函數調用中提及它。只要做'a()'。 – michaelpri

+1

它打印無,因爲您顯式傳遞覆蓋默認值的參數 – Li357

+0

爲什麼要傳遞值而不使用它? – cmd

回答

4

有沒有內置的支持,以明確使用某個參數的默認值。如果你不想離開這個參數了在調用點,你必須非常手動檢索默認值:

import inspect 

a(num=inspect.signature(a).parameters['num'].default) 

這不會是值得的,在大多數情況下。

0

不,你不能:這是一個矛盾的條款。使用默認值當且僅當您做而不是在參數列表中提供一個值。如果您提供了一個值,那麼在例程中使用默認的不能使用

2
def a(num=None): 
    if num is None: 
     num = 3 
    print(num) 

a(num=None) # prints 3 
a() # prints 3 

...我想...也許

或者解釋默認PARAMS

def a(num=3): 
    print(num) 

a(num=None) # prints None 
a() # prints 3 
+0

是的,這就是我一直在定義我的大部分功能......雖然這只是一個麻煩,特別是有很多參數。 –