MEMOO
MEMOO
Published on 2025-04-20 / 3 Visits
0
0

Python **kwargs参数

摘要:在本教程中,你将学习 Python 的 **kwargs 参数。

Python **kwargs 参数介绍

在 Python 中,函数可以有一个参数前面带有两个星号(**)。例如:**kwargs

**kwargs 被称为关键字参数。

当函数具有 **kwargs 参数时,它可以接受可变数量的关键字参数,这些参数会以字典的形式传递。

两个星号(**)是重要的。然而kwargs 这个名称只是约定俗成的。因此,你可以使用任何其他有意义的名称,例如 **configs**files

以下示例定义了一个名为 connect() 的函数,该函数接受一个 **kwargs 参数:

def connect(**kwargs):
    print(type(kwargs))
    print(kwargs)

以下函数调用会在屏幕上显示一个空字典:

def connect(**kwargs):
    print(type(kwargs))
    print(kwargs)

connect()

输出:

<class 'dict'>
{}

在这个例子中,我们没有向 connect() 函数传递任何参数,因此 kwargs 是一个空字典。

以下调用 connect() 函数并向其中传递了一些关键字参数:

def connect(**kwargs):
    print(type(kwargs))
    print(kwargs)

connect(server='localhost', port=3306, user='root', password='Py1hon!Xt')

它会在屏幕上显示以下字典:

<class 'dict'>
{'server': 'localhost', 'port': 3306, 'user': 'root', 'password': 'Py1hon!Xt'}

connect() 函数内部,你可以将 kwargs 参数当作字典来使用。

如果你想要将一个字典传递给该函数,你需要在参数前加上两个星号(**),如下所示:

def connect(**kwargs):
    print(kwargs)


config = {'server': 'localhost',
        'port': 3306,
        'user': 'root',
        'password': 'Py1thon!Xt12'}

connect(**config)

如果一个函数有 **kwargs 参数和其他参数,你需要将 **kwargs 放在其他参数之后。否则,你会得到一个错误。

以下 connect() 函数的语法是正确的:

def connect(fn, **kwargs):
    print(kwargs)

然而,这个函数的语法会导致 SyntaxError(语法错误):

def connect(**kwargs, fn):
    print(kwargs)

同时使用*args和**kwargs

以下函数同时具有 *args**kwargs 参数:

def fn(*args, **kwargs):
    print(args)
    print(kwargs)

fn 函数可以接受可变数量的位置参数。Python 会将它们打包成一个元组,并将该元组赋值给 args 参数。

fn 函数还接受可变数量的关键字参数。Python 会将它们打包成一个字典,并将该字典赋值给 kwargs 参数。

例如:

def fn(*args, **kwargs):
    print(args)
    print(kwargs)

fn(1, 2, x=10, y=20)

输出:

(1, 2)
{'x': 10, 'y': 20}

总结

  • 使用 Python 的 **kwargs 参数,允许函数接受可变数量的关键字参数。

  • 在函数内部kwargs 参数是一个字典,其中包含所有关键字参数及其名称-值对。

  • 在字典参数前加上双星号(**),以将其传递给 **kwargs 参数。

  • 始终将 **kwargs 参数放在参数列表的末尾,否则会导致错误。


Comment