Python可變參數(shù)*args和**kwargs
本文我們將通過示例了解 Python函數(shù)的可變參數(shù)*args和 **kwargs的用法。
知識(shí)預(yù)備:Python 函數(shù)和 Python 函數(shù)參數(shù)
在Python編程中,我們定義一個(gè)函數(shù)來生成執(zhí)行類似操作的可重用代碼。為了執(zhí)行這個(gè)操作,我們調(diào)用一個(gè)具有特定值的函數(shù),這個(gè)值在 Python 中稱為函數(shù)參數(shù)。
函數(shù)示例
假設(shè),我們定義了一個(gè)3個(gè)數(shù)相加的函數(shù)。
示例1: 用于加3個(gè)數(shù)字的函數(shù)
# 定義函數(shù)
def add(x, y, z):
print(f"總和: {x+y+z}")
# 調(diào)用函數(shù)
add(10,12,13)
當(dāng)我們運(yùn)行上面的程序時(shí),將會(huì)輸出如下結(jié)果:
總和: 35
在上面的程序中,我們有三個(gè)參數(shù) x,y 和 z 的加法函數(shù)。當(dāng)我們在調(diào)用 add()函數(shù)傳遞三個(gè)值時(shí),我們得到這三個(gè)數(shù)字的和作為輸出。
接下來,讓我們看看當(dāng)我們在add()函數(shù)中傳遞超過3個(gè)參數(shù)時(shí)會(huì)發(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)行上面的程序時(shí),輸出將是
TypeError: add() takes 3 positional arguments but 5 were given
在上面的程序中,我們給add()函數(shù)傳遞了5個(gè)參數(shù),而不是由于3個(gè)參數(shù),并且得到 TypeError 錯(cuò)誤。
這很顯然不是我們想要的效果,那么應(yīng)該怎么解決這個(gè)問題呢?
如果我們實(shí)際調(diào)用的時(shí)候,如果入?yún)⒌膫€(gè)數(shù)是不確定的,就可以使用可變參數(shù)的語法來解決。
Python可變參數(shù)
在 Python 中,我們可以使用特殊符號(hào)向函數(shù)傳遞可變數(shù)量的參數(shù)。
有兩個(gè)特殊的符號(hào):
*args:可變位置參數(shù)**kwargs:可變關(guān)鍵字參數(shù)
當(dāng)我們不確定要在函數(shù)中傳遞的參數(shù)數(shù)量時(shí),我們就可以在函數(shù)定義中,使用 *args 和 **kwargs 作為形式參數(shù)。
Python *args
正如上面的例子一樣,我們不確定可以傳遞給函數(shù)的參數(shù)數(shù)量。有 *args,允許我們傳遞可變數(shù)量的非關(guān)鍵字參數(shù)到函數(shù)中。
在函數(shù)定義中,我們應(yīng)該在參數(shù)名之前使用星號(hào) * 來傳遞可變長度的參數(shù)。參數(shù)以元組的形式傳遞,這些傳遞的參數(shù)在函數(shù)內(nèi)部使用
與參數(shù)(不包括星號(hào) *)相同的名稱構(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)部,我們有一個(gè)循環(huán),
它把傳遞的實(shí)際參數(shù)相加,并打印結(jié)果。注意,這里調(diào)用了3次,分別傳遞了不同的值,它們的長度可變,作為函數(shù)的實(shí)際參數(shù)。
當(dāng)我們運(yùn)行上面的程序時(shí),輸出將是:
總和: 8
總和: 22
總和: 17
Python **kwargs
對(duì)于傳遞關(guān)鍵字參數(shù)這個(gè)問題,Python 有一個(gè)名為 **kwargs 的解決方案,它允許我們將可變長度的關(guān)鍵字參數(shù)傳遞給函數(shù)。
具體做法是,在函數(shù)中,我們在參數(shù)名之前使用雙星號(hào)**來表示這種類型的參數(shù)。接收到的參數(shù)在函數(shù)內(nèi)構(gòu)成一個(gè)dict字典對(duì)象,
其名稱與參數(shù)(不包括兩個(gè)星號(hào)**)相同。
示例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="干飯")
在上面的程序中,我們定義了一個(gè)以 **data 數(shù)據(jù)為形參的函數(shù) intro ()。我們將兩個(gè)長度可變的字典實(shí)參傳遞給 intro()函數(shù)。
我們intro()函數(shù)中使用for循環(huán),它對(duì)傳遞字典的數(shù)據(jù)項(xiàng)進(jìn)行處理,并輸出字典的值。
當(dāng)我們運(yùn)行上面的程序時(shí),輸出將是:
實(shí)參的數(shù)據(jù)類型是: <class 'dict'>
name:小佛
age:30
實(shí)參的數(shù)據(jù)類型是: <class 'dict'>
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í)行字典的操作。
到此這篇關(guān)于Python可變參數(shù)*args和**kwargs的文章就介紹到這了,更多相關(guān)Python *args **kwargs內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python函數(shù)參數(shù)*args**kwargs用法實(shí)例
- 用實(shí)例說明python的*args和**kwargs用法
- Python中*args和**kwargs的區(qū)別詳解
- Python可變參數(shù)*args和**kwargs用法實(shí)例小結(jié)
- 關(guān)于Python中*args和**kwargs的深入理解
- Python中*args與**kwargs的高級(jí)應(yīng)用指南
- Python *args和**kwargs用法實(shí)例解析
- Python中的“_args”和“__kwargs”用法詳解
- Python中args和kwargs用法與區(qū)別舉例詳解
相關(guān)文章
python無限生成不重復(fù)(字母,數(shù)字,字符)組合的方法
今天小編就為大家分享一篇python無限生成不重復(fù)(字母,數(shù)字,字符)組合的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python創(chuàng)建一個(gè)最簡單http webserver服務(wù)器的方法
這篇文章主要介紹了python創(chuàng)建一個(gè)最簡單http webserver服務(wù)器的方法,實(shí)例分析了Python操作http創(chuàng)建服務(wù)器端的相關(guān)技巧,需要的朋友可以參考下2015-05-05
VSCode搭建Django開發(fā)環(huán)境的圖文步驟
本篇介紹在vscode環(huán)境下搭建Django開發(fā)環(huán)境的詳細(xì)步驟,包括Python、Django、VSCode等,以及它們的安裝和配置方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊
這篇文章主要為大家介紹了python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
python使用tkinter實(shí)現(xiàn)簡單計(jì)算器
這篇文章主要為大家詳細(xì)介紹了python使用tkinter實(shí)現(xiàn)簡單計(jì)算器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
python學(xué)習(xí)與數(shù)據(jù)挖掘應(yīng)知應(yīng)會(huì)的十大終端命令
今天我們將介紹一些基本的數(shù)據(jù)收集、探索和聚合—所有這些都是通過shell完成的。如果你使用的是Linux或Mac,那么接下來就不會(huì)有任何問題,但是Windows用戶應(yīng)該在繼續(xù)之前下載一個(gè)終端仿真器2021-11-11
Python實(shí)現(xiàn)的彩票機(jī)選器實(shí)例
python?實(shí)現(xiàn)?mp3Play?音頻播放

