使用*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