动态参数的含义
传入的参数个数是动态的,可以是0个到任意个,实现没有规定参数的数量。
动态参数的种类
动态参数一般有两种,*args和**kwargs。这里只有星号*的区别,一个星号和两个星号,后面的名字是人们根据习惯取的。可以根据个人喜好命名成*one和**two,等等。
*args
一个星号表示接收任意个参数。调用时,会将实际参数打包成一个元组传入形式参数。如果参数是个列表,会将整个列表当做一个参数传入。例如:
def function(*args):
print(args, type(args))
function(1)
结果:(1, ) <class 'tuple' >
有时候我们传入一个列表,本意是希望将列表中的所有元素都当做参数传递进去,这里直接将['a', 'b', 'c']看做一个整体了,怎么办?其实只需要在调用时前面加一个*号,就能实现将列表中的每个元素传递进去了。其实不光列表,任何序列类型数据对象,比如字符串、元组都可以通过这种方式将内部元素逐一作为参数,传递给函数。而字典,则会将所有的key逐一传递进去。
**kwargs
**kwargs 打包关键字参数成dict给函数体调用。例如:
def function(**kwargs):
print( kwargs, type(kwargs))
function(a=2)
结果:{'a' : 2} <class 'dict' >
注意
如果一个函数需要同时用到参数、动态参数*args和**kwargs时,注意顺序一定是(args,*args,**kwargs),否则程序会报错。
参考资料
https://www.cnblogs.com/gcgc/p/11426478.html
https://www.cnblogs.com/yunguoxiaoqiao/p/7626992.html