__kwdefaults__是一个函数对象属性有什么用?

scd*_*dmb 12 python python-3.x

函数对象具有属性__defaults____kwdefaults__.我看到,如果一个函数有一些默认的参数,然后它们被放在一个元组__defaults____kwdefaults__None.何时使用属性__kwdefaults__

Mar*_*zer 12

def foo(arg1, arg2, arg3, *args, kwarg1="FOO", kwarg2="BAR", kwarg3="BAZ"):
    pass

print(foo.__kwdefaults__)
Run Code Online (Sandbox Code Playgroud)

输出(Python 3):

{'kwarg1': 'FOO', 'kwarg2': 'BAR', 'kwarg3': 'BAZ'}
Run Code Online (Sandbox Code Playgroud)

由于*args会吞下所有非关键字参数,因此必须使用关键字传递后面的参数.见PEP 3102.


Pav*_*sov 8

它仅用于关键字参数:

>>> def a(a, *, b=2): pass
...
>>> a.__kwdefaults__
{'b': 2}

>>> def a(*args, a=1): pass
...
>>> a.__kwdefaults__
{'a': 1}
Run Code Online (Sandbox Code Playgroud)