Python的*args与**kwargs

当Python的函数的参数不确定时,可以使用*args与**kwargs来指代不定数量的参数。

两者的区别是,*args是个tuple(元组),而**kwargs是个dict(字典)。

先通过代码来验证上述的结论是否正确:

def func_args(*args):
    print(type(args))

def func_kwargs(**kwargs):
    print(type(kwargs))

if __name__ == '__main__':
    func_args(1, 2, 3)
    func_kwargs(a=1, b=2, c=3)

运行结果,可以明确看出args是元组,kwargs是字典

<class 'tuple'>
<class 'dict'>

 

接着尝试下*args的使用,实现一个函数,将传入的参数值×2后返回。因为传入的参数数量不定,所以函数返回的结果也不定。

def func_a(*args):
    return tuple(arg * 2 for arg in args)

if __name__ == '__main__':
    a, b = func_a(1, 2)
    c, d = func_a('a', 'b')
    print(a, b, c, d)

在func_a中,返回了一个元组,利用Python元组自动解包的功能,将tuple的值分别赋值给变量a 和 b。

运行结果:

2 4 aa bb

 

posted @ 2016-06-21 11:51  BlackMatrix  阅读(935)  评论(0编辑  收藏  举报