日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python可變參數*args和**kwargs_python

作者:深藍小佛 ? 更新時間: 2022-05-25 編程語言

本文我們將通過示例了解 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

欄目分類
最近更新