在学 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 里搜索过?不知道关键词不对还是怎么,没有找出相关的答案.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/233698
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.