Python 在后跟*args之后,是否可以使用默认参数?
例如,如果我有:Python 在后跟*args之后,是否可以使用默认参数?,python,python-3.x,Python,Python 3.x,例如,如果我有: def foo(arg1, def_par="yes", *args,**kwargs): print(arg1,def_par) for key, value in kwargs.items(): print("{},{}".format(key,value)) for arg in args: print(arg) foo("Hello",1,2,smell="funky") 然后,解释器输出: &
def foo(arg1, def_par="yes", *args,**kwargs):
print(arg1,def_par)
for key, value in kwargs.items():
print("{},{}".format(key,value))
for arg in args:
print(arg)
foo("Hello",1,2,smell="funky")
然后,解释器输出:
>>Hello 1
>>smell,funky
>>2
是否有一种方法可以创建输出,除非由关键字参数显式定义,否则默认参数用于创建输出,例如:
>>Hello Yes
>>smell,funky
>>1
>>2
您可以将变量位置参数置于关键字参数之前: 更改:
def foo(arg1, def_par="yes", *args,**kwargs):
致:
通过此更改,您的代码将输出:
Hello yes
smell,funky
1
2
如果出于某种原因您不能或不想更改foo
的函数签名,您可以使用inspect.signature
获取参数的默认值:
import inspect
foo("Hello", inspect.signature(foo).parameters['def_par'].default, 1, 2, smell="funky")
我知道这是一种获取要使用的默认参数的方法,但这并不是我真正想要的。为了澄清,我询问是否可以使用当前函数参数使用默认参数,而不使用第二个参数(在本例中为1)。有没有一种方法可以访问该默认参数值,而不必显式声明它?比如我可以用类似于self/this的东西->foo(“你好”,self.def_par,1,2,嗅觉=“funky”),我明白了。我已经用你的要求更新了我的答案。但是,如果可以的话,最好还是更改函数签名,以便更容易地使用默认值
def_par
。好的,这很有意义!谢谢你的回复!
import inspect
foo("Hello", inspect.signature(foo).parameters['def_par'].default, 1, 2, smell="funky")