欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python可變參數(shù)*args和**kwargs

 更新時間:2022年03月23日 08:37:02   作者:深藍(lán)小佛  
本文我們將通過示例了解 Python函數(shù)的可變參數(shù)*args和?**kwargs的用法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文我們將通過示例了解 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)我們運行上面的程序時,將會輸出如下結(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)我們運行上面的程序時,輸出將是

TypeError: add() takes 3 positional arguments but 5 were given

在上面的程序中,我們給add()函數(shù)傳遞了5個參數(shù),而不是由于3個參數(shù),并且得到 TypeError 錯誤。

這很顯然不是我們想要的效果,那么應(yīng)該怎么解決這個問題呢?

如果我們實際調(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ù)相加,并打印結(jié)果。注意,這里調(diào)用了3次,分別傳遞了不同的值,它們的長度可變,作為函數(shù)的實際參數(shù)。

當(dāng)我們運行上面的程序時,輸出將是:

總和: 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ù)據(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 ()。我們將兩個長度可變的字典實參傳遞給 intro()函數(shù)。
我們intro()函數(shù)中使用for循環(huán),它對傳遞字典的數(shù)據(jù)項進(jìn)行處理,并輸出字典的值。

當(dāng)我們運行上面的程序時,輸出將是:

實參的數(shù)據(jù)類型是: <class 'dict'>
name:小佛
age:30
實參的數(shù)據(jù)類型是: <class 'dict'>
city:深圳
lan:Python
hobby:干飯

總結(jié)

值得注意的幾點:

  • *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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)的彩票機選器實例

    Python實現(xiàn)的彩票機選器實例

    這篇文章主要介紹了Python實現(xiàn)彩票機選器的方法,可以模擬彩票號碼的隨機生成功能,需要的朋友可以參考下
    2015-06-06
  • python?實現(xiàn)?mp3Play?音頻播放

    python?實現(xiàn)?mp3Play?音頻播放

    這篇文章主要介紹了python?實現(xiàn)?mp3Play?音頻播放,文章基于python的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考價值需要的小伙伴可以參考一下
    2022-04-04
  • 最新評論