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