python *args和**kwargs魔法變量

1、 函數的三種主要參數類型:

標準參數、*args、**kwargs

2、 定義:

  *args、**kwargs,也叫魔法參數。它們發揮作用的重點是前面的星號,這兩個可以打包或者解包相應的參數,至於,args、kwargs是代指,也可以是任何其他字符,例如*x,**xx。

  • ** *args**:可變長參數列表,也可以說成可變長參數集合。*可以捕獲標準參數後鍵值對參數前所有位置參數,按position unpack 參數列表。
  • **kwargs:可變長鍵值對參數,多指字典。**可以捕獲所有關鍵字參數。按key word unpack 參數列表。

3、使用舉例

  魔法參數使用主要是兩方面,一是定義函數時不確定函數參數的數量。二是調用函數時,爲了將參數一次性傳入。
1、定義函數
  下面舉例了,**是如何將傳入的字典參數解包,以及如何將傳入的關鍵字參數打包成一個字典類型

def get(url, **kwargs):
        kwargs.setdefault('allow', True)# 設定kwargs的默認鍵值
        # 此時kwargs是一個字典,任何字典操作都以應用
        for i in kwargs:
            print(i,kwargs[i])
get('url',data=3, headers=4)
------------輸出-------------
data 3
headers 4
allow True
----------------------------
arg = {'data':3, 'headers':4}
get('url',**arg)
data 3
headers 4
allow True

* 使用如下,同樣道理,打包與解包。打包後,args是一個tuple類型

def send(x,*args):
    #args是一個列表
    for i in args:
        print(i)
send('x',3,4,5,6)
----------輸出---------
3
4
5
6
----------------------
s = 'abcde' # 這裏舉例一個str,str也會是一個集合,也可以試試列表、tuple等
send('x',*s)
b
c
d
e

2、調用函數
  調用函數時使用魔法變量主要作用是解壓unpack參數集合。
**使用舉例

def send(url,data,header=None):
    print('url:',url)
    print('data:',data)
    print('headers:',header)
kwarg = {'url':'http://www.xxx.com','data':'oooo', 'header':'Chrome'}```
send(**kwarg)
------------------輸出-----------------------------
url: http://www.xxx.com
data: oooo
headers: Chrome

注意當使用**解析字典型參數時,傳入函數的是類似key=value的形式,所有字典的鍵值必須存在於函數定義時參數名字中,否則會報錯。TypeError: send() got an unexpected keyword argument ‘p’。

*使用舉例,按位置分配參數值。此時,傳入的數據類型可以是列表、tuple、str等,然後,*可以將其解包。

def get(x,y,z):
    print('x:',x)
    print('y:',y)
    print('z:',z)
arg = [1,2,3]
get(*arg)
---------------輸出-------------------------------------
x: 1
y: 2
z: 3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章