Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在后跟*args之后,是否可以使用默认参数?_Python_Python 3.x - Fatal编程技术网

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