在学 python 的函数传递参数的时候看到这样一篇文章.
http://blog.csdn.net/qinyilang/article/details/5484415 其中有代码
>>> def add(a, b, c):
return a + b + c
>>> add(1, 2, 3)
6
>>> add(a=4, b=5, c=6)
15
>>> args = (2, 3)
>>> add(1, *args)
6
>>> kwargs={'b': 8, 'c': 9}
>>> add(a=7, **kwargs)
24
>>> add(a=7, *args)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() got multiple values for keyword argument 'a'
>>> add(1, 2, a=7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() got multiple values for keyword argument 'a'
当这样调用 的时候 add(a=7, *args)会报错。而 add(7, *args)这样子就不会了。。
文末最后有一段话**因为 python 使用次序规则来扩展过量的参数,那位置参数要放在前面。**
是不是意思是在这里*args 会优先解包,按次序匹配,所以最后 python 不知道要把哪个值给 a 了???但是也看到一些地方说 key=value 形式的实参要优先*args 的?
python 入门者..好多概念不是很清晰.所以不是很明白了..这个地方要怎么去理解?
已在社区 google 里搜索过?不知道关键词不对还是怎么,没有找出相关的答案.