测试环境:
操作系统: Window 10
工具:Pycharm
Python: 3.7
下面就用惯例 *args
和 **kwargs
来代表所有的 *
和 **
为什么叫所有,因为只要是任意合法的变量加上 *
或 **
就可以是,所谓的 *args
和 **kwargs
既可以是 *testargs
或 ** testkwargs
也可以是 *aa
或 ** bb
在使用 *args
和 ** kwargs
前,先去理解它的英文意思
*args —— arguments / args n. [计算机]参数 (复数) ; 参数
**kwargs —— key word arguments / kwargs n. 关键字参数
在 python 语言里,*args
是作为元组类型的数据结构变量来接收控制台的数据的,实际调用并输出是 args
变量
eg:
def test(a,b,*args):
return args
测试结果:
>>> test(1,2,3,4)
(3, 4)
>>> type(test(1,2,3,4))
<class 'tuple'>
未知数量参数传参 *args
个人理解:
a 和 b 参数接收了 1 和 2 这两个,其余的都给
*args
,就是这么理解,先满足了已创建好的参数,再来满足*args
参数,而且元组是不可更改的数据类型,有利于安全性。在这里args
只是一个程序员比较常用的变量,可以选择自己喜欢的变量名来代替*args
。
**kwargs
是一个自定义键参数传值的一个特性参数,示例如下:
def test(a,b,**kwargs):
a = kwargs['test']
return a
测试结果如下:
>>> test(1,2,test=1)
1
>>> test(1,2,test=2)
2
def test(a,b,**kwargs):
a = kwargs['test']
return a,kwargs
测试结果如下:
>>> test(1,2,test=2)
(2, {'test': 2})
**kwargs
个人理解:
**kwargs
是以接收字典的形式,来存储参数的,指定kwargs
字典内未创建的键,再给键赋值,这样的逻辑流程。在这里每一个关键字是未被kwargs
字典创建的,需要自己自定义好键,再给键传参数 (赋值),前面讲的是关键字传参的逻辑流程,调用**kwargs
,其实就是在调用字典kwargs
——kwargs.items()
字典有的方法,它都能用,本质上就是一个字典。