可以在* args之后使用默认参数吗?

时间:2018-08-25 03:12:04

标签: 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")

然后解释器输出:

>>Hello 1
>>smell,funky
>>2

有没有一种创建输出的方法,除非使用关键字参数明确定义,否则默认参数用于创建输出,例如:

>>Hello Yes
>>smell,funky
>>1
>>2

1 个答案:

答案 0 :(得分:2)

您可以在关键字参数之前放置可变位置参数:

更改:

def foo(arg1, def_par="yes", *args,**kwargs):

收件人:

def foo(arg1, *args, def_par="yes", **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")