使用*args和kwargs可以非常方便的定义函数,同时增强代码的可扩展性,方便代码维护。**
#1.*args
***args 用在不确定传入参数个数的情况下。且以元组方式呈现。**比如下面的例子:
def myfunction(*args):
print(*args[0])
print(*args[1])
print(*args[2])
if __name__ == '__main__':
myfunction([1,2,3],(True,False),'hello')
输出:
1 2 3 True False h e l l o
当同时有位置参数和*args行参时,用法如下:
def myfunction(x,*args):
print('x:',x)
print('*args[0]:',*args[0])
print('*args[1]:',*args[1])
#print(*args[2])
if __name__ == '__main__':
myfunction([1,2,3],(True,False),'hello')
输出:
x: [1, 2, 3] *args[0]: True False *args[1]: h e l l o
#2.**kwargs
形参中按照关键字传值,把多余的传值以字典的方式呈现
def myfunction(x,**kwargs):
print(kwargs)
if __name__ == '__main__':
myfunction(1,a=1,b=2,c=3)
输出一个字典:
{'a': 1, 'b': 2, 'c': 3}
也可以分开输出和调用:
def myfunction(**kwargs):
for k,v in kwargs.items():
print(k,v)
if __name__ == '__main__':
myfunction(a=1,b=2,c=3)
#3.同时使用位置参数 ,*args和**kwargs
同时使用三者时,顺序必须是位置参数,*args,**kwargs,否则会报错。
如下面的例子所示:
def myfunction(param,*args,**kwargs):
print('param:',param)
print('*args:',*args)
print('**kwargs:',kwargs)
if __name__ == '__main__':
myfunction('hello',['x','y','z'],(20,30),a=1,b=2,c=3)
输出:
param: hello *args: ['x', 'y', 'z'] (20, 30) **kwargs: {'a': 1, 'b': 2, 'c': 3}
本文是在阅读别人材料的基础上做了一个自己的小结,下面是两篇很好的参考链接:
python函数——形参中的:*args和**kwargs
理解 Python 中的 *args 和 **kwargs