轉自https://www.cnblogs.com/ellisonzhang/p/10243122.htmljavascript
1、函數的動態參數 *args,**kwargs, 形參的順序
一、你的函數,爲了拓展,對於傳入的實參數量應該是不固定,
因此就須要用到萬能參數,動態參數,*args, **kwargshtml
1,*args 將全部實參的位置參數聚合到一個元組,並將這個元組賦值給args
(起做用的是* 並非args,可是約定俗成動態接收實參的全部位置參數就用args)java
def sum1(*args): print(args) sum1(1,2,['hello']) #是一個元組(1, 2, ['hello'])
2,**kwargs 將全部實參的關鍵字參數聚合到一個字典,並將這個字典賦值給kwargs
(起做用的是** 並非kwargs,可是約定俗成動態接收實參的全部關鍵字參數就用kwargs)函數
def fun(*args,**kwargs): print(args) print(kwargs) fun(1,2,['a','b'],name='xiaobai',age=18) # 結果: # (1, 2, ['a', 'b']) #位置參數,元組 # {'name': 'xiaobai', 'age': 18} #關鍵字參數,字典
二、*的用法
在函數的定義時,*位置參數,**關鍵字參數--->聚合。
在函數的調用(執行)時,*位置參數,**關鍵字參數--->打散。post
實參--->*位置參數--->把位置參數打散成最小的元素,而後一個個添加到args裏組成一個元組this
l1 = [1,2,3] l2 = [111,22,33,'xiaobai'] #若是要將l1,l2經過函數整合到一塊兒 # 方法一(實參不用*): def func1(*args): return args[0] + args[1] print(func1(l1,l2)) #[1, 2, 3, 111, 22, 33, 'xiaobai'] # 方法二(實參用*): def func1(*args): return args print(func1(*l1,*l2)) #(1, 2, 3, 111, 22, 33, 'xiaobai')
實參--->**關鍵字參數--->把關鍵字參數打散成最小的元素,而後一個個添加到kwargs裏組成一個字典spa
def func1(**kwargs): print(kwargs) #func1(name='xiaobai',age=18,job=None,hobby='girl') func1(**{'name':'xiaobai','age':18},**{'job':None,'hobby':'girl'}) # 結果: # {'name': 'xiaobai', 'age': 18, 'job': None, 'hobby': 'girl'}
三、形參的順序(a--->b,表明的順序是寫參數時,要先寫a再寫b)
位置參數--->默認參數code
def func(a,b,sex='男'): print(sex) func(100,200)
位置參數--->*args--->默認參數htm
def func(a,b,*args,sex='男'): print(a,b) print(args) print(sex) func(100,200,1,2,34,5,'女',6) # 結果: # 100 200 #a,b # (1, 2, 34, 5,'女',6) #args # 男 #默認參數
位置參數--->*args--->默認參數--->**kwargsblog
def func(a,b,*args,sex='男',**kwargs): print(a,b) print(args) print(sex) print(kwargs) func(100,200,1,2,34,5,6,sex='女',name='xiaobai',age=1000) func(100,200,1,2,34,5,6,name='xiaobai',age=1000,sex='女') # 兩個的結果都是: # 100 200 #a,b # (1, 2, 34, 5, 6) #args # 女 #默認參數修改後的值 # {'name': 'xiaobai', 'age': 1000} #kwargs # 如果形參這樣寫: def func(a,b,*args,**kwargs,sex='男'): print(a,b) print(args) print(sex) print(kwargs) func(100,200,1,2,34,5,6,name='xiaobai',age=1000,sex='女') # 結果:會報錯,默認參數必定要寫在kwargs前面