python *args **kwargs 可變參數的應用

一、可變參數的理解

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 成鍵值對參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章