在公司看到這兩個參數,通過logger.info的輸出可看到想要的結果
好奇之下對這兩個參數進行了深入的了解
基本的一些共性就是:
簡單的說args(arguments):位置參數。kwargs(key arguments):關鍵字參數
科普一下python的參數類型(類似其他語言都有形參、實參等):
# 自定義函數
def func(a, b):
print(a + b)
# 實際調用調用,位置一一對應
func(1,1)
# 自定義函數
def func(a, b):
print(a + b)
# 實際調用調用,關鍵字通過字典的形式傳輸
func(a=1, b=1)
如果兩者參數(位置參數和關鍵字參數)混合使用,關鍵字參數必須在位置參數的後面
至於為什麼要在後面,通過結合位置參數以及關鍵字的參數原理:
位置參數:實參和形參位置保持一致,按形參聲明的先後順序一一賦值,否則會出錯
關鍵字參數:調用函數以形參=實參的方式,(實參的順序無所謂)
具體看完整例子:
# 自定義函數
def func(a, b):
print(a + b)
# 混合使用,正確調用輸出
func(1, b=1)
# 混合使用,錯誤調用,無法輸出
func(a=1, 1)
對於參數需要傳入什麼,以及什麼類型
具體可看我之前的文章:
python數據類型詳細分析(附代碼)
如果在參數名前加*,代表這個參數為可變參數
知識點如下:
元組
進行存儲,整體賦值給變量名為*args通過上面參數的科普,*args為位置參數
具體通過例子清晰:
# 自定義函數
def func(*args):
print(type(args))
# 調用函數,傳入2個數值
func(1, 2) # 輸出的內容為 <class 'tuple'> ,通過元組的格式進行存儲
既然已經知道以元組的格式進行存儲
可以通過自定義一個元組之後傳入參數
# 定義元組
tuple = (1, 2)
# 調用函數
func(*tuple)
知識點如下:
字典
進行存儲,整體賦值給變量名為**kwargs具體例子如下:
# 自定義函數
def func(**kwargs):
print(type(kwargs))
# 調用函數,傳入2個數值
func(a=1 , b=2) # 輸出的內容為 <class 'dict'> ,通過字典的格式進行存儲
既然已經知道是字典的格式存儲,可以自定義一個字典
# 定義字典
dict = {
'a': 1,
'b': 2
}
# 調用函數
func(**dict)
上文已經知道關鍵字參數要在位置參數之後
具體例子如下:
# 自定義函數,包含*args和**kwargs
def func(argument, *args, **kwargs):
print(argument) # 輸出1
print(args) # 輸出2
print(kwargs) # 輸出3
# 調用函數,傳入argument、args以及kwargs參數
func(1, 2, a=3)
已經知道一個是位置參數一個是關鍵字參數
可以自定義一個元組以及字典的類型:
# 定義元組以及字典類型
tuple = (1, 2)
dict = {
'a': 1,
'b': 2
}
# 調用函數,傳入參數
# 注意位置參數和關鍵字參數的順序
func(*tuple , **dict)