2013-06-29 62 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