参数*args与**kwargs

参考网址:https://www.cnblogs.com/cwind/p/8996000.html

1. *

1. 定义一个含三个位置参数的函数”fun”.
    >>> def fun(a,b,c):
    ...     print a,b,c
    ... 
2. 传三个位置参数调用此函数
    >>> fun(1,2,3)
    1 2 3       #输出
  可以看到出入三个位置参数调用此函数,会打印出三个参数

3. 现在我们定义一个含三个整数的数列,并使用’*’
    >>> l = [1,2,3]
    >>> fun(*l)
    1 2 3       #输出
  “*”拆开数列’l’的数值作为位置参数,并吧这些位置参数传给函数’fun’来调用

2. *args

1. 修改函数的定义:
>>> def fun(*args):
    ...     print args
    ... 
2. 传一个位置参数调用此函数     
>>> fun(13)     (13,)   传多个参数调用此函数     >>> fun(11,93,43)     (11, 93, 43)

“*args”接收元组作为位置参数,而非是常见的参数列表,它可以接受任意个参数

3. **

定义一个三个参数的函数,并用多种方式调用:
    >>> def fun(a, b, c):
    ...     print a, b, c
    ... 
    >>> fun(1,5,7)
    1 5 7
    >>> fun(a=1,b=5,c=7)
    1 5 7
  使用”**”调用函数,这种方式我们需要一个字典.注意:在函数调用中使用”*”,我们需要元组;在函数调用中使用”**”,我们需要一个字典     >>> d={'b':5, 'c':7}     >>> fun(1, **d)     1 5 7

“**”可以unpack字典,并将字典中的数据项作为键值参数传给函数。因此,上例中”fun(1, **d)”的写法与”fun(1, b=5, c=7)”等效. 

4. **kwargs

定义函数”fun”:
    >>> def fun(a, **kwargs):
    ...     print a, kwargs
    ... 
此函数只用一个位置参数,因为常规参数列表中只有一个变量’a’.但是通过”**kwargs”,可以传多个键值参数。

    >>> fun(1, b=4, c=5)
    1 {'c': 5, 'b': 4}
    >>> fun(45, b=6, c=7, d=8)
    45 {'c': 7, 'b': 6, 'd': 8}
用”**kwargs”定义函数,kwargs接收除常规参数列表职位的键值参数字典。在这里’kwargs’是个字典。
原文地址:https://www.cnblogs.com/JackShi/p/12698021.html