原文鏈接:Python中的*args和**kwargs(python基礎學習)_蒲公英上的塵埃的博客-CSDN博客_**kwargs
1、*args和**kwargs主要用於定義函數的可變參數
2、*args:發送一個非鍵值對的可變數量的參數列表給函數
3、**kwargs:發送一個鍵值對的可變數量的參數列表給函數
4、如果想要在函數內使用帶有名稱的變量(像字典那樣),那麼使用**kwargs。
定義可變參數的目的是為了簡化調用。
*和**在此處的作用:打包參數。
1、*args和**kwargs不是固定的,只有前面的*和**是固定不可變的,後面的名稱可以隨意改,例如*vals代表非鍵值對的可變數量的參數,**parms代表可變數量的鍵值對參數。使用*args和**kwargs,是一種約定成俗的習慣,你也可以不使用這個名稱。
2、當要同時使用*args和**kwargs時,*args必須寫在**kwargs之前。
def test_args(*args):
print(args)
def test_kwargs(**kwargs):
print(kwargs)
print(type(kwargs))
for key, value in kwargs.items():
print("{} == {}".format(key, value))
def test_all(*args,**kwargs):
print(args)
print(kwargs)
∗把函數test_args()接受到的多個參數'name','age','address','sex'
,打包成了元組('name','age','address','sex')
,賦值給了形參args。
test_args('name','age','address','sex')
# ('name', 'age', 'address', 'sex')
**把函數test_kwargs()接受到的多個參數,以字典的形式賦值給了形參kwargs。
test_kwargs(name='zxf',age=23,address='zhejiang')
# {'name': 'zxf', 'age': 23, 'address': 'zhejiang'}
# <class 'dict'>
# name == zxf
# age == 23
# address == zhejiang
test_all('name','age',name='zxf',age=23)
# ('name', 'age')
# {'name': 'zxf', 'age': 23}