程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python關於 *args 和 **kwargs 參數的詳解(全)

編輯:Python

目錄

  • 前言
  • 1. 位置參數和關鍵字參數
  • 2. *args
  • 3. **kwargs
  • 4. *args 和 **kwargs 結合

前言

在公司看到這兩個參數,通過logger.info的輸出可看到想要的結果
好奇之下對這兩個參數進行了深入的了解

基本的一些共性就是:

  • 兩個參數都是一個可變參數
  • 如果對參數不確定可結合這兩個參數替代

簡單的說args(arguments):位置參數。kwargs(key arguments):關鍵字參數

1. 位置參數和關鍵字參數

科普一下python的參數類型(類似其他語言都有形參、實參等):

  • 形參實參(類似其他語言):定義函數(形參),調用函數(實參)
  • 位置參數:函數傳入的參數與實際函數的參數在位置和定義的含義需要保持一致(實參位置和形參保持一致,按形參聲明的先後順序一一賦值)
# 自定義函數
def func(a, b):
print(a + b)
# 實際調用調用,位置一一對應
func(1,1)
  • 關鍵字參數:調用函數(key=value)以鍵值對形式(實參的順序無所謂)。如果參數有*args和**kwargs,則應保持(*args,**kwargs)
# 自定義函數
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數據類型詳細分析(附代碼)

2. *args

如果在參數名前加*,代表這個參數為可變參數

知識點如下:

  • 傳參時,接受任意的位置參數
  • 會將其參數整體組裝變成一個元組進行存儲,整體賦值給變量名為*args

通過上面參數的科普,*args為位置參數
具體通過例子清晰:

# 自定義函數
def func(*args):
print(type(args))
# 調用函數,傳入2個數值
func(1, 2) # 輸出的內容為 <class 'tuple'> ,通過元組的格式進行存儲

既然已經知道以元組的格式進行存儲
可以通過自定義一個元組之後傳入參數

# 定義元組
tuple = (1, 2)
# 調用函數
func(*tuple)

3. **kwargs

知識點如下:

  • 傳參數,接受任意的關鍵字參數
  • 會將其參數整體組裝變成一個字典進行存儲,整體賦值給變量名為**kwargs

具體例子如下:

# 自定義函數
def func(**kwargs):
print(type(kwargs))
# 調用函數,傳入2個數值
func(a=1 , b=2) # 輸出的內容為 <class 'dict'> ,通過字典的格式進行存儲

既然已經知道是字典的格式存儲,可以自定義一個字典

# 定義字典
dict = {

'a': 1,
'b': 2
}
# 調用函數
func(**dict)

4. *args 和 **kwargs 結合

上文已經知道關鍵字參數要在位置參數之後
具體例子如下:

# 自定義函數,包含*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)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved