(转)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} 

 

posted @ 2022-02-22 15:43  maple_hx  阅读(97)  评论(0)    收藏  举报