python变量值触发参数默认值

时间:2013-06-29 22:23:03

标签: python argument-passing

在Python中,是否有一个值可以设置为变量,因此当它传递给函数时,函数将使用参数的默认值?例如:

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

my_function( my_variable )

会打印“默认值”。这样做会是Pythonic吗?

2 个答案:

答案 0 :(得分:1)

你通常这样做;你将参数完全保留下来并留给python来填写默认值:

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'}

答案 1 :(得分: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