*arge 接收的数据类型为tuple
**kwargs接收的数据类型为dict
当对象实例化时,如果有参数传入,则会传入**kwargs,如下面,user = User(name="bobby"), 调试中发现,args的tuple的值为0,无值传入。 而kwargs的值有传入{'name':'bobby'},即参数被传入了kwargs的dict中
当对象实例化时,如果无参数传入,则会传入*args,如下面,user = User("bobby"), 调试中发现,kwargs的dict为空,无值传入。即参数被传入了args的tuple中
一、*args的使用方法
*args 用来将参数打包成tuple给函数体调用
二、**kwargs的使用方法
**kwargs 打包关键字参数成dict给函数体调用
注意:参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。
如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;
如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。
args和kwargs这两个标识符是约定俗成的用法,你当然还可以用*bob和**billy,但是这样就并不太妥。
下面是具体的示例:
为什么提这个问题?
有时候,我们需要往函数中传入未知个数的参数或关键词参数。有时候,我们也希望把参数或关键词参数储存起来,以备以后使用。有时候,仅仅是为了节省时间。
*args 和 **kwargs 都代表 1个 或 多个 参数的意思。*args 传入tuple 类型的无名参数,而 **kwargs 传入的参数是 dict 类型。