美文网首页
*args和**kwargs

*args和**kwargs

作者: 西多的大叔 | 来源:发表于2017-08-24 22:06 被阅读0次
    def foo(*args, **kwargs): 
     print(args, kwargs)
    
    - 1 foo(x=1)
    - 2 foo(1)
    - 3 foo({"x": 1})
    - 4 foo(**{"x": 1}) dic = {"x": 1}
    - 5 foo(dic)
    - 6 foo(**dic)
    

    结果:

    - 1 () {'x': 1}
    - 2 (1,) {}
    - 3 ({'x': 1},) {}
    - 4 () {'x': 1}
    - 5 ({'x': 1},) {}
    - 6 () {'x': 1}
    

    args:函数的自变量
    kwargs:keyword args 关键字参数
    如果是在函数调用中
    * args表示将可迭代对象扩展为函数的参数列表,在获取可变数量的参数时特别有用,由于args * 前缀,所有多余的参数都会作为一个元组存储在args中。
    def func(*args):  print argsfunc(1,2,3)等价于func( * (1,2,3))

    ** kwargs 表示将字典扩展为关键字参数,由于kwargs的**前缀多余的参数会被认为是一个字典的键/值对。
    def func( **kwargs):  print kwargsfunc(a=1,b=2)等价于func( **{'a':1,'b':2})

    当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用 * 和 ** 前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。

    注意

    [1] 由于在args变量前有 * 前缀 ,所有多余的函数参数都会作为一个元组存储在args中 。如果使用的是 ** 前缀 ,多余的参数则会被认为是一个字典的健/值对 。

    [2] 对于def func(* args):,* args表示把传进来的位置参数存储在tuple(元组)args里面。例如,调用func(1, 2, 3) ,args就表示(1, 2, 3)这个元组 。

    [3] 对于def func(** args):,** args表示把参数作为字典的健-值对存储在dict(字典)args里面。例如,调用func(a='I', b='am', c='wcdj')args就表示{'a':'I', 'b':'am', 'c':'wcdj'}这个字典

    [4] 注意普通参数与 * 和 ** 参数公用的情况,一般将 * 和 **参数放在参数列表最后。

    相关文章

      网友评论

          本文标题:*args和**kwargs

          本文链接:https://www.haomeiwen.com/subject/nbkydxtx.html