我刚遇到这种令我惊讶的行为:
def my_func(a=4, **kwargs):
print kwargs
Run Code Online (Sandbox Code Playgroud)
演示:
>>> my_func(a=5, b=6)
{'b': 6} # I was expecting {'a' : 4, 'b' : 6}
# Maybe {'a' : 5, 'b' : 6}
Run Code Online (Sandbox Code Playgroud)
另外,如果我得到,我不会感到惊讶:
SyntaxError: keyword argument repeated
如在
>>> my_func(a=4, a=5)
File "<stdin>", line 1
SyntaxError: keyword argument repeated
Run Code Online (Sandbox Code Playgroud)
要么 TypeError: my_func() got multiple values for keyword argument 'a'
如在
>>> my_func(a=4, **{'a' : 5, 'b' : 6})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: my_func() got multiple values for keyword argument 'a'
Run Code Online (Sandbox Code Playgroud)
删除关键字'a'后python遵循哪些规则?
也许我错过了一些明显的或关键的术语,但我无法通过搜索找到解决方案.
a没有被删除,它只是没有被包含在内**kwargs,因为你在函数定义中明确定义了它.所以如果我编辑你原来的例子:
def my_func(a=4, **kwargs):
print kwargs
print a
Run Code Online (Sandbox Code Playgroud)
然后测试一下:
>>> my_func(a=5, b=7)
{'b': 7}
5
Run Code Online (Sandbox Code Playgroud)
该**kwargs参数用于收集函数调用中给出的可选关键字参数,这些参数未明确包含在函数定义中.由于您包含a=4在定义中my_func,因此不会包含在内**kwargs.
这在Python文档中提到(强调我的):
当存在**name形式的最终形式参数时,它会接收一个字典(请参阅映射类型 - dict),其中包含除了与形式参数相对应的所有关键字参数.
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |