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