## var-keywords parameter
## 定义的时候,需要两个星号作为前缀
>>>def func(arg1, arg2, **kwargs):
print (arg1, arg2, kwargs)
>>>func("hello", "Dict, values is:", x=2, y=3, z=3)
hello Dict., values is: {'y': 3, 'x': 2, 'z': 3}
## 多余的参数将自动被放入字典中提供给函数使用
## 如果你需要直接传递字典给函数
## 你需要在传递的过程中添加**
## 此时如果还有关键字参数应在字典前提供完成
## 不能在字典后再提供
## 请看下面例子中的输出差异:
>>>func("hello", "Dict., values is:", **{'x':2, 'y':3, 'z':3})
hello Dict., values is: {'y': 3, 'x': 2, 'z': 3}
>>>func("hello", "Dict., values is:", **{'x':2, 'y':3, 'z':3,})
hello Dict., values is: {'y': 3, 'x': 2, 'z': 3}
>>>func("hello", "Dict., values is:", {'x':2, 'y':3, 'z':3})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: func() takes exactly 2 arguments (3 given)
>>>func("hello", "Dict., values is:", s=3, **{'x':2, 'y':3, 'z':3,})
hello Dict., values is: {'y': 3, 'x': 2, 's': 3, 'z': 3}
## 提供了重复的参数
>>>func("hello", "Dict., values is:", y=3, **{'x':2, 'y':3, 'z':3,})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: func() got multiple values for keyword argument 'y'
网友评论