Python 在源码函数中的*args和**kwargs
一、两个参数的含义
*args:任意个无名参数,类型为tuple或list(()元组和[]列表)
**kwargs:任意个关键字参数(key-word args,键值对),类型为dict({}字典)
*arg和**kwargs在函数定义优先级方面最低,其中*args参数优先于**kwargs参数。
发扬了参数传递的灵活性。
*参数和**参数在源码中的存在方式如下图matplotlib.pyplot.plot方法的源码:
二、*和**两者出现在函数定义中的作用——打包
在python中,当*和**符号出现在参数中时,表示任意个数的参数。
*arg表示任意多个无名参数,类型为tuple;稍后解释;
**kwargs表示关键字参数,为dict;稍后解释;
定义时需将*arg放在**kwargs之前,否则会出现错误提示 ” *parameter after ** parameter ”
使用时需将*arg放在**kwargs之前,否则会有“SyntaxError: positional argument follows keyword argument”的语法错误
三、*和**两者出现在函数调用中的作用——解包
在函数调用时,*parameter 会以单个元素的形式分解tuple,使其成为独立的参数。
在函数调用时,**parameter会以键/值对的形式分解成dict,使其成为独立的关键字参数(有索引)。
通过一个元祖给普通函数传递参数,并且分解成单个的元素
如果已经有一个dict,在参数前面加**,函数会把dict中所有键值对转换为关键字参数传进去,该例子中关键字参数是extract。
四、总结
定义中参数存在*和**parameter,其功能是打包(传入普参后转化成为tuple和dict类型)
调用的时候参数存在*parameter和**parameter,其功能是解包(将传入的tuple和dic变量转化成普参)