Python 中的 kwargs

Manav Narula 2023年1月30日
  1. 在 Python 中使用 **kwargs 讓函式獲取任意數量的關鍵字引數
  2. 在 Python 中呼叫函式時使用 *l 引數解包引數
Python 中的 kwargs

我們可以為函式提供不同的引數。這些引數在函式中用於執行一些所需的工作。

在程式設計中,我們用函式名指定括號中的引數。我們可以在函式定義中指定所需的引數數量。

在 Python 中使用 **kwargs 讓函式獲取任意數量的關鍵字引數

Python 中有關鍵字、位置和任意引數。Python 提供了一個有趣的特性 **kwargs

它是代表關鍵字引數的標準符號。我們可以使用 this 為函式提供任意數量的引數。

這裡 kwargs 只是一個變數名,可以用任何其他有效的變數名替換。這裡的主要部分是**運算子。

** 在 Python 中被稱為解包操作符。我們用它來解壓 Python 中的字典。

我們還有 * 運算子,它可以解包列表、元組和其他可迭代物件,它們可以使用這兩者來為函式提供任意數量的引數。

kwargs 背後的主要概念是函式將接收這些引數打包到一個物件中。它將解包所有元素並根據需要在函式中使用它們。

首先,讓我們用 * 運算子來演示這一點。如前所述,它用於從可迭代的列表或元組中解包元素。

最基本的使用方法是在函式定義中提供*kwargs。這樣,我們可以為函式指定任意數量的引數。

def fun(*l):
    for i in l:
        print(i)


fun(1, 2, 3)

輸出:

1
2
3

在 Python 中呼叫函式時使用 *l 引數解包引數

在上面的示例中,我們使用函式的 *l 引數來解包多個引數並列印它們。

類似地,*l 可用於在呼叫函式時解包引數。在這裡,角色顛倒了。

def fun(x, y):
    print(x, y)


l = [5, 7]
fun(*l)

輸出:

5 7

在上面的例子中,我們不能直接向函式傳送一個列表。所以我們在呼叫函式時解壓它。

現在讓我們討論**kwargs。使用這種方法,我們可以為函式提供許多關鍵字引數。

引數作為字典的鍵值對傳遞,並使用 ** 運算子在函式中解包。

def fun(**kwargs):
    for i in kwargs:
        print(i, kwargs[i])


fun(a=1, b=2, c=3)

輸出:

a 1
b 2
c 3

我們使用 **kwargs 將多個關鍵字引數傳遞給上例中的函式。

我們還可以同時使用這兩種方法來指定多個引數和位置引數。

def fun(x, **kwargs):
    print("Multiple Keyword Arguments")
    for i in kwargs:
        print(i, kwargs[i])
    print("Positional arguments", x)


fun(10, a=1, b=2, c=3)

輸出:

Multiple Keyword Arguments
a 1
b 2
c 3
Positional arguments 10

確保關鍵字引數的順序很重要,因為在 Python 3.6 中,會記住它們的插入順序。

我們還可以在 Python 3 中使用 * 運算子進行擴充套件的可迭代解包。我們可以使用賦值語句左側的運算子。

我們也可以使用它在函式呼叫中提供多個引數。

def fun(x, z, *l):
    print("Multiple Arguments")
    for i in l:
        print(i)
    print("Positional arguments", x, z)


x, *y, z = [1, 2, 3, 4]
fun(x, z, *y)

輸出:

Multiple Arguments
2
3
Positional arguments 1 4
作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn