2

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

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

my_function( my_variable )

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

4

2 回答 2

2

您通常会这样做;你把参数完全去掉,把它留给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'}
于 2013-06-29T22:24:40.720 回答
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
于 2013-06-30T00:01:37.400 回答