Python中*args、**args到底是什么、有啥区别、怎么用

*args 不定参数,元组,如(1,2,n)**kwargs 传入键值对,字典(例如:num1=11,num2=22)先看示例1:
def test(a,b,c=3,*args):print(a)print(b)print(c)print(args)test(11,22,33,44,55)输出值分别为:
112233(44,55)也就是说args中保存的是没有利用的所有多余参数,保存方式为元组
再看示例2:
def test(a,b,c=3,*args1,**args2):print(a)print(b)print(c)print(args1)print(args2)test(11,22,33,dd=44,ee=55,ff=66)输出结果为:
112233(){'dd':44, 'ee':55, 'ff':66}即输入多余参数有变量名,就保存在args中保存,保存方式为字典
如果多余参数中既有*args类型,也有args类型,则分别保存
def foo(*args, **kwargs):print ('args = ', args)print ('kwargs = ', kwargs)print ('---------------------------------------')if __name__ == '__main__':foo(1,2,3,4)foo(a=1,b=2,c=3)foo(1,2,3,4, a=1,b=2,c=3)foo('a', 1, None, a=1, b='2', c=3) 
输出结果如下:
args = (1, 2, 3, 4)kwargs = {}args = ()kwargs = {'a': 1, 'c': 3, 'b': 2}args = (1, 2, 3, 4)kwargs = {'a': 1, 'c': 3, 'b': 2}args = ('a', 1, None)kwargs = {'a': 1, 'c': 3, 'b': '2'} 
可以看到,这两个是Python中的可变参数 。
args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个 dict 。并且同时使用args和kwargs时,必须*args参数列要在kwargs前,像foo(a=1, b=‘2’, c=3, a’, 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg” 。

【Python中*args、**args到底是什么、有啥区别、怎么用】


    推荐阅读