<返回更多

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

2022-03-28    灯-灯灯
加入收藏

*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)

输出值分别为:

11
22
33
(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)

输出结果为:

11
22
33
()
{'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/ target=_blank class=infotextkey>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”。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>