是否可以在方法签名中组合**kwargs和关键字参数?
>>> def f(arg, kw=[123], *args, **kwargs):
... print arg
... print kw
... print args
... print kwargs
...
>>> f(5, 'a', 'b', 'c', kw=['abc'], kw2='def')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got multiple values for keyword argument 'kw'
Run Code Online (Sandbox Code Playgroud)
它似乎毫无用处,但也许有人找到了一个很好的技巧......
rob*_*ert 12
在Python 3中,您可以使用仅限关键字的参数(PEP 3102).有了这些,你的功能将如下所示:
>>> def f(arg, *args, kw=[123], **kwargs):
... print(arg)
... print(kw)
... print(args)
... print(kwargs)
>>> f(5, 'a', 'b', 'c', kw=['abc'], kw2='def')
5
('a', 'b', 'c')
['abc']
{'kw2': 'def'}
Run Code Online (Sandbox Code Playgroud)
(注意,虽然我改变了参数的顺序,但我没有改变prints 的顺序.)
在Python 2中,你不能在varargs参数之后有一个关键字参数,但是在Python 3中你可以,并且它使该参数仅用于关键字.
另外,要小心将可变对象作为默认参数.
你要两次分配kw.
在这个调用中f(5, 'a', 'b', 'c', kw=['abc'], kw2='def'),arg = 5,kw ='a',*args =('b','c'),然后你试图再次分配kw.
| 归档时间: |
|
| 查看次数: |
4778 次 |
| 最近记录: |