在Python中,是否有一个值可以设置为变量,因此当它传递给函数时,函数将使用参数的默认值?例如:
def my_function( a = "default_value" ) :
print a
my_function( my_variable )
会打印“默认值”。这样做会是Pythonic吗?
答案 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