python 函数的可变参数

为什么80%的码农都做不了架构师?>>>   hot3.png


    除了常见的位置参数、关键字参数、默认参数,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)
>>>

 

转载于:https://my.oschina.net/payun/blog/511520

你可能感兴趣的:(python)