2013-06-29 95 views
1

在Python中,有一個變量可以被設置爲一個值,這樣當它被傳遞給函數的函數將使用參數的默認值?例如:Python變量值觸發參數默認

def my_function(a = "default_value") : 
    print a 

my_function(my_variable) 

會打印「默認值」。 Pythonic會這麼做嗎?

回答

1

你通常做做到這一點;你完全退出參數並把它留給蟒蛇填寫默認:

my_function() 

您可以從與inspect.getargspec() function函數檢索默認值。

from inspect import getargspec 

defaults = getargspec(my_function).defaults 
my_variable = defaults[0] 
my_function(my_variable) 

你的例子當然很簡單;只需要一個參數你知道有一個默認值。在更常見的情況下,也有位置參數,它們沒有默認值。

爲了重建有默認值,你需要重新組合的參數和它們的默認設置什麼樣的參數:

argspec = getargspec(my_function) 
keyword_args = dict(zip(argspec.args[-len(argspec.defaults):], argspec.defaults)) 
positional_args = [None] * (len(argspec.args) - len(argspec.defaults)) # set all positionals to None 
my_function(*positional_args, **keyword_args) 

演示:

>>> from inspect import getargspec 
>>> defaults = getargspec(my_function).defaults 
>>> my_variable = defaults[0] 
>>> my_function(my_variable) 
default_value 
>>> argspec = getargspec(my_function) 
>>> keyword_args = dict(zip(argspec.args[-len(argspec.defaults):], argspec.defaults)) 
>>> positional_args = [None] * (len(argspec.args) - len(argspec.defaults)) # set all positionals to None 
>>> my_function(*positional_args, **keyword_args) 
default_value 
>>> keyword_args 
{'a': 'default_value'} 
+0

謝謝你,善良的先生。 – Kris

1

使用默認參數,除了從僅僅是一種常見的成語沒有通過該值是將該參數設置爲默認爲None,然後使用默認值,如果它是None,例如:

def my_function(a=None): 
    if a is None: 
     a = "default_value" 
    print a 

那麼你可以傳遞None的功能和它不會殺死默認參數。

my_variable = None 
my_function(my_variable) # prints 'default_value' 

你可能想,如果你有多個功能類似的簽名要做到這一點,例如:

def func1(a=None, b=None): 
    print b 
    func2(a) 

def func2(a=None): 
    if a is None: 
     a = 'default value' 
    print a