網站首頁 編程語言 正文
本文我們將通過示例了解 Python函數的可變參數*args
和?**kwargs
的用法。
知識預備:Python 函數和 Python 函數參數
在Python編程中,我們定義一個函數來生成執行類似操作的可重用代碼。為了執行這個操作,我們調用一個具有特定值的函數,這個值在 Python 中稱為函數參數。
函數示例
假設,我們定義了一個3個數相加的函數。
示例1: 用于加3個數字的函數
# 定義函數 def add(x, y, z): print(f"總和: {x+y+z}") # 調用函數 add(10,12,13)
當我們運行上面的程序時,將會輸出如下結果:
總和: 35
在上面的程序中,我們有三個參數 x,y 和 z 的加法函數。當我們在調用 add()函數傳遞三個值時,我們得到這三個數字的和作為輸出。
接下來,讓我們看看當我們在add()函數中傳遞超過3個參數時會發生什么。
# 定義函數 def add(x, y, z): print(f"總和: {x+y+z}") # 調用函數 add(5,10,15,20,25)
當我們運行上面的程序時,輸出將是
TypeError: add() takes 3 positional arguments but 5 were given
在上面的程序中,我們給add()函數傳遞了5個參數,而不是由于3個參數,并且得到 TypeError 錯誤。
這很顯然不是我們想要的效果,那么應該怎么解決這個問題呢?
如果我們實際調用的時候,如果入參的個數是不確定的,就可以使用可變參數的語法來解決。
Python可變參數
在 Python 中,我們可以使用特殊符號向函數傳遞可變數量的參數。
有兩個特殊的符號:
-
*args
:可變位置參數 -
**kwargs
:可變關鍵字參數
當我們不確定要在函數中傳遞的參數數量時,我們就可以在函數定義中,使用?*args
?和?**kwargs
?作為形式參數。
Python *args
正如上面的例子一樣,我們不確定可以傳遞給函數的參數數量。有?*args
,允許我們傳遞可變數量的非關鍵字參數到函數中。
在函數定義中,我們應該在參數名之前使用星號?*
?來傳遞可變長度的參數。參數以元組的形式傳遞,這些傳遞的參數在函數內部使用
與參數(不包括星號 *)相同的名稱構成元組。
例2: 使用?*args
?將可變長度的參數傳遞給函數
# 定義函數 def add(*num): sum = 0 for n in num: sum = sum + n print(f"總和: {sum}") # 調用函數 add(3,5) add(4,5,6,7) add(1,2,3,5,6)
在上面的程序中,我們使用?*num
?聲明形式參數,它允許我們向?add()
?函數傳遞可變長度的參數列表。在函數內部,我們有一個循環,
它把傳遞的實際參數相加,并打印結果。注意,這里調用了3次,分別傳遞了不同的值,它們的長度可變,作為函數的實際參數。
當我們運行上面的程序時,輸出將是:
總和: 8
總和: 22
總和: 17
Python **kwargs
對于傳遞關鍵字參數這個問題,Python 有一個名為?**kwargs
?的解決方案,它允許我們將可變長度的關鍵字參數傳遞給函數。
具體做法是,在函數中,我們在參數名之前使用雙星號**
來表示這種類型的參數。接收到的參數在函數內構成一個dict字典對象,
其名稱與參數(不包括兩個星號**
)相同。
示例3: 使用?**kwargs
?將可變關鍵字參數傳遞給函數
# 定義函數 def intro(**data): print("實參的數據類型是:",type(data)) for key, value in data.items(): print(f"{key} is {value}") # 調用函數 intro(name="小佛", age=30) intro(city="深圳", lan="Python", hobby="干飯")
在上面的程序中,我們定義了一個以?**data
?數據為形參的函數 intro ()。我們將兩個長度可變的字典實參傳遞給?intro()
函數。
我們intro()
函數中使用for循環,它對傳遞字典的數據項進行處理,并輸出字典的值。
當我們運行上面的程序時,輸出將是:
實參的數據類型是:
name:小佛
age:30
實參的數據類型是:
city:深圳
lan:Python
hobby:干飯
總結
值得注意的幾點:
-
*args
和**kwargs
讓函數變得非常靈活。 -
*args
和**kwargs
是特殊的關鍵字,允許函數采用可變長度參數。 -
*args
和**kwargs
是約定俗稱的名稱,可以自定義,例如*cat
,或者**dog
。 -
*args
傳遞可變數量的位置參數,并且可以在其上執行元組的操作。 -
**kwargs
傳遞可變數目的關鍵字參數,以便在其上執行字典的操作。
原文鏈接:https://www.cnblogs.com/amoyshmily/p/16040232.html
相關推薦
- 2022-04-11 git項目初次push提示error: failed to push some refs to ht
- 2023-03-11 Go語言中init函數與匿名函數使用淺析_Golang
- 2022-01-16 ES6新增聲明格式、變量解構賦值及模板字符串
- 2022-08-17 C++關于樹的定義全面梳理_C 語言
- 2022-07-16 簡述 Spring Bean的生命周期
- 2023-04-24 一文掌握python中的__init__的意思及使用場景分析_python
- 2022-04-01 Python 中 __name__ == '__main__' 的作用
- 2022-05-31 Python中的列表及其操作方法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支