一、可變參數的理解
1、*args 和 **kwargs 主要用於定義函數的可變參數。
2、*args:發送一個非鍵值對的可變數量的參數列表給函數,本質上是一個tuple。
3、**kwargs:發送一個鍵值對的可變數量的參數列表給函數,本質上是一個dict。
4、如果想要在函數內使用帶有名稱的變量(像字典那樣),那麼使用**kwargs。
定義可變參數的目的是爲了簡化調用。
二、使用時注意事項
1、*args 和 **kwargs 不是固定的,只有前面的 “*” 和 “**” 是固定不可變的,後面的名稱可以隨意改,使用 *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')
test_all('name','age',name='tel',age=30)
# ('name', 'age')
# {'name': 'tel', 'age': 30}
test_kwargs(name='tel',age=30,address='beijing')
# {'name': 'tel', 'age': 30, 'address': 'beijing'}
# <class 'dict'>
# name == tel
# age == 30
# address == beijing
三、總結一下
在定義的函數參數列表中使用*args和**kwargs,則在調用這個函數時,*args表示可以對函數傳遞不定量的位置參數,這些參數自動在函數內部組裝成一個tuple;**kwargs則允許對函數傳遞不定量個鍵值對參數,他們在函數內部被組裝成dict。在函數調用時,* 可以將序列/集合 unpack (打開)成位置參數,** 可以將字典 unpack 成鍵值對參數。