在后跟*args之后,是否可以使用默认参数?

2024-04-25 14:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,如果我有:

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

Tags: keyinhelloforfoovaluedefarg
1条回答
网友
1楼 · 发布于 2024-04-25 14:25:43

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

更改:

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")

相关问题 更多 >