简单说明Python中*args 和 **kwargs的区别

*args,**kwargs是什么?

其实就是函数的不定参数。定义了这两种参数的函数,可以给它传0到多个参数。

1. *args例子

In [19]: def fun1(*args):
    ...:     print(args)
    ...:

In [20]: fun1()


In [21]: fun1(1,2,"abc")
1 2 abc

可以看到,*args会取得所有入参。

2. **kwargs 例子

In [30]: fun2(a=1,b=2)
{'a': 1, 'b': 2}

In [31]: fun2(1,3)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-31-0f91f63085a1> in <module>()
----> 1 fun2(1,3)

TypeError: fun2() takes 0 positional arguments but 2 were given

注意看 In [30] 和 In [31]。

区别

发现区别了吗,如果给fun2传fun1那样的参数,解释器会报错:“未定义位置型参数,却收到了两个参数。” 也就是说,kwargs需要的是带名称的参数,而args代表位置型参数(无名称参数)。从英语上来说,kwargs多出来的kw其实就是keyword的意思,表示这是“键值对”参数,就像字典那样。

如果定义一个函数同时定义两种可变参数,那么两种都可以正常获取。如下:

In [32]: def fun3(*args, **kwargs):
    ...:     print(args)
    ...:     print(kwargs)
    ...:
In [34]: fun3(1,3, a=8,b=9)
(1, 3)
{'a': 8, 'b': 9}

你可能感兴趣的:(Python)