網(wǎng)站首頁 編程語言 正文
本文我們將通過示例了解 Python函數(shù)的可變參數(shù)*args
和?**kwargs
的用法。
知識預(yù)備:Python 函數(shù)和 Python 函數(shù)參數(shù)
在Python編程中,我們定義一個函數(shù)來生成執(zhí)行類似操作的可重用代碼。為了執(zhí)行這個操作,我們調(diào)用一個具有特定值的函數(shù),這個值在 Python 中稱為函數(shù)參數(shù)。
函數(shù)示例
假設(shè),我們定義了一個3個數(shù)相加的函數(shù)。
示例1: 用于加3個數(shù)字的函數(shù)
# 定義函數(shù) def add(x, y, z): print(f"總和: {x+y+z}") # 調(diào)用函數(shù) add(10,12,13)
當(dāng)我們運(yùn)行上面的程序時,將會輸出如下結(jié)果:
總和: 35
在上面的程序中,我們有三個參數(shù) x,y 和 z 的加法函數(shù)。當(dāng)我們在調(diào)用 add()函數(shù)傳遞三個值時,我們得到這三個數(shù)字的和作為輸出。
接下來,讓我們看看當(dāng)我們在add()函數(shù)中傳遞超過3個參數(shù)時會發(fā)生什么。
# 定義函數(shù) def add(x, y, z): print(f"總和: {x+y+z}") # 調(diào)用函數(shù) add(5,10,15,20,25)
當(dāng)我們運(yùn)行上面的程序時,輸出將是
TypeError: add() takes 3 positional arguments but 5 were given
在上面的程序中,我們給add()函數(shù)傳遞了5個參數(shù),而不是由于3個參數(shù),并且得到 TypeError 錯誤。
這很顯然不是我們想要的效果,那么應(yīng)該怎么解決這個問題呢?
如果我們實(shí)際調(diào)用的時候,如果入?yún)⒌膫€數(shù)是不確定的,就可以使用可變參數(shù)的語法來解決。
Python可變參數(shù)
在 Python 中,我們可以使用特殊符號向函數(shù)傳遞可變數(shù)量的參數(shù)。
有兩個特殊的符號:
-
*args
:可變位置參數(shù) -
**kwargs
:可變關(guān)鍵字參數(shù)
當(dāng)我們不確定要在函數(shù)中傳遞的參數(shù)數(shù)量時,我們就可以在函數(shù)定義中,使用?*args
?和?**kwargs
?作為形式參數(shù)。
Python *args
正如上面的例子一樣,我們不確定可以傳遞給函數(shù)的參數(shù)數(shù)量。有?*args
,允許我們傳遞可變數(shù)量的非關(guān)鍵字參數(shù)到函數(shù)中。
在函數(shù)定義中,我們應(yīng)該在參數(shù)名之前使用星號?*
?來傳遞可變長度的參數(shù)。參數(shù)以元組的形式傳遞,這些傳遞的參數(shù)在函數(shù)內(nèi)部使用
與參數(shù)(不包括星號 *)相同的名稱構(gòu)成元組。
例2: 使用?*args
?將可變長度的參數(shù)傳遞給函數(shù)
# 定義函數(shù) def add(*num): sum = 0 for n in num: sum = sum + n print(f"總和: {sum}") # 調(diào)用函數(shù) add(3,5) add(4,5,6,7) add(1,2,3,5,6)
在上面的程序中,我們使用?*num
?聲明形式參數(shù),它允許我們向?add()
?函數(shù)傳遞可變長度的參數(shù)列表。在函數(shù)內(nèi)部,我們有一個循環(huán),
它把傳遞的實(shí)際參數(shù)相加,并打印結(jié)果。注意,這里調(diào)用了3次,分別傳遞了不同的值,它們的長度可變,作為函數(shù)的實(shí)際參數(shù)。
當(dāng)我們運(yùn)行上面的程序時,輸出將是:
總和: 8
總和: 22
總和: 17
Python **kwargs
對于傳遞關(guān)鍵字參數(shù)這個問題,Python 有一個名為?**kwargs
?的解決方案,它允許我們將可變長度的關(guān)鍵字參數(shù)傳遞給函數(shù)。
具體做法是,在函數(shù)中,我們在參數(shù)名之前使用雙星號**
來表示這種類型的參數(shù)。接收到的參數(shù)在函數(shù)內(nèi)構(gòu)成一個dict字典對象,
其名稱與參數(shù)(不包括兩個星號**
)相同。
示例3: 使用?**kwargs
?將可變關(guān)鍵字參數(shù)傳遞給函數(shù)
# 定義函數(shù) def intro(**data): print("實(shí)參的數(shù)據(jù)類型是:",type(data)) for key, value in data.items(): print(f"{key} is {value}") # 調(diào)用函數(shù) intro(name="小佛", age=30) intro(city="深圳", lan="Python", hobby="干飯")
在上面的程序中,我們定義了一個以?**data
?數(shù)據(jù)為形參的函數(shù) intro ()。我們將兩個長度可變的字典實(shí)參傳遞給?intro()
函數(shù)。
我們intro()
函數(shù)中使用for循環(huán),它對傳遞字典的數(shù)據(jù)項(xiàng)進(jìn)行處理,并輸出字典的值。
當(dāng)我們運(yùn)行上面的程序時,輸出將是:
實(shí)參的數(shù)據(jù)類型是:
name:小佛
age:30
實(shí)參的數(shù)據(jù)類型是:
city:深圳
lan:Python
hobby:干飯
總結(jié)
值得注意的幾點(diǎn):
-
*args
和**kwargs
讓函數(shù)變得非常靈活。 -
*args
和**kwargs
是特殊的關(guān)鍵字,允許函數(shù)采用可變長度參數(shù)。 -
*args
和**kwargs
是約定俗稱的名稱,可以自定義,例如*cat
,或者**dog
。 -
*args
傳遞可變數(shù)量的位置參數(shù),并且可以在其上執(zhí)行元組的操作。 -
**kwargs
傳遞可變數(shù)目的關(guān)鍵字參數(shù),以便在其上執(zhí)行字典的操作。
原文鏈接:https://www.cnblogs.com/amoyshmily/p/16040232.html
相關(guān)推薦
- 2023-12-21 uniapp 清除文件緩存
- 2022-08-20 使用Docker制作Python環(huán)境連接Oracle鏡像_python
- 2022-10-10 VMware?Workstation與Device/Credential?Guard不兼容的解決_V
- 2022-04-20 Httprunner簡介、安裝及基本使用教程_python
- 2022-07-26 arduino上傳程序出錯不成功常見的問題解決
- 2022-07-28 超級詳細(xì)講解C++中的多態(tài)_C 語言
- 2022-11-12 python?鏡像環(huán)境搭建總結(jié)_python
- 2022-05-25 python?序列去重并保持原始順序操作_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支