摘要:在本教程中,你将学习 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
参数放在参数列表的末尾,否则会导致错误。