在 Python 中,是否可以为变量设置一个值,以便在将其传递给函数时,该函数将使用参数的默认值?例如:
def my_function( a = "default_value" ) :
print a
my_function( my_variable )
将打印“默认值”。这样做会是 Pythonic 吗?
在 Python 中,是否可以为变量设置一个值,以便在将其传递给函数时,该函数将使用参数的默认值?例如:
def my_function( a = "default_value" ) :
print a
my_function( my_variable )
将打印“默认值”。这样做会是 Pythonic 吗?
您通常不会这样做;你把参数完全去掉,把它留给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'}
除了不传递值之外,使用默认参数的一个常见习惯用法是将参数设置为默认值 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