(转)python3中的*args和**kwargs
用代码来举例:
1 def foo(*args, **kwargs): 2 print("args= ", args) 3 print("kwargs= ", kwargs) 4 print("----------------------") 5 6 if __name__=='__main__': 7 foo(1,2,3,4) 8 foo(a=1,b=2,c=3) 9 foo(1,2,3,4, a=1,b=2,c=3) 10 foo('a', 1, None, a=1, b='2', c=3)
最后输出的结果就是:
1 args= (1, 2, 3, 4) 2 kwargs= {} 3 ---------------------- 4 args= () 5 kwargs= {'a': 1, 'b': 2, 'c': 3} 6 ---------------------- 7 args= (1, 2, 3, 4) 8 kwargs= {'a': 1, 'b': 2, 'c': 3} 9 ---------------------- 10 args= ('a', 1, None) 11 kwargs= {'a': 1, 'b': '2', 'c': 3} 12 ----------------------
可以看到*args和**kwargs都能接受任意个数的形参,其中前者是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。
而**kwargs可以用作创建一个字典
1 def kw_dict(**kwargs): 2 return kwargs 3 4 print(kw_dict(a=1,b=2,c=3))
结果就是:
1 {'a': 1, 'b': 2, 'c': 3}

浙公网安备 33010602011771号