为什么80%的码农都做不了架构师?>>>
除了常见的位置参数、关键字参数、默认参数,python还有可变参数,支持任意多的参数。
def func(name = value ) - 匹配默认参数
def func(*name) - 匹配 tuple 中所有包含位置的参数
def func(**name) - 匹配 dict 中所有包含位置的参数
python 内部是使用以下顺序进行参数匹配的,所以在编写可变参数时要按如下规则来。
1. 通过位置分配非关键字参数
2. 通过匹配变更名分配关键字参数
3. 其它额外的非关键字参数分配到 *name tuple中
4. 其它额外的关键字参数分配到 **name 字典中
5. 用默认值分配通过以上步骤未传递到值的参数
*name 实例
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> def f(*args):print (args)
...
>>> f()
()
>>> f(1)
(1,)
>>> f(1,2,3)
(1, 2, 3)
>>>
**name 实例
>>> def f(**args):print (args)
...
>>> f()
{}
>>> f(a=1,b=2)
{'a': 1, 'b': 2}
>>>
解包参数实例
不光在定义函数时候可以利用 * 和 ** 这种方法,在调用的时候也可以用,只要个数相匹配即可。
>>> def func(a,b,c,d): print (a,b,c,d)
...
>>> args = {'a':1,'b':2,'c':3,'d':4}
>>> func(**args)
(1, 2, 3, 4)
>>>
>>> args = (1,2,3,4)
>>>
>>> func(*args)
(1, 2, 3, 4)
>>>
>>> args = (1,2,3,)
>>> func(*args)
Traceback (most recent call last):
File "", line 1, in
TypeError: func() takes exactly 4 arguments (3 given)
>>>