Python 中的 **args 和 **kwargs

17 Mar 2025 | 4 分钟阅读

什么是参数?

在 Python 或任何其他编程语言中,我们将一些变量或参数传递给某个函数。在这种情况下,这些变量称为函数的参数。在函数定义中,我们必须定义参数的类型和我们将传递的参数数量。

但是,如果我们不知道要为任何函数传递的参数数量,我们可以使用 *args 和 **kwargs 关键字。

换句话说,在其他语言中,没有传递可变数量参数的灵活性,但在 Python 中,我们可以借助 *args 和 **kwargs 关键字在函数中传递可变数量的参数。

我们可以传递两种类型的参数给函数:

  1. 关键字参数(Keyword arguments)
  2. 非关键字参数

如果我们想传递非关键字参数,我们将使用 *args 关键字;如果我们想传递关键字参数,我们将使用 **kwargs 关键字。

在这里,* 被称为通配符,我们可以用任何数字替换它,表示函数中的任意数量的参数。* 的值可以是零,这意味着函数中没有参数。

Python 中的 *args

使用此关键字,我们可以将任何可变长度的参数列表传递给函数,这称为“args”。由于 * 表示可变数量的参数,因此它是可迭代的,这意味着我们可以对其应用循环或使用 map 或 filter 等其他函数进行迭代。

示例 1

输出

**args and **kwargs in Python

说明

在上面的代码中,我们有一个函数,它接受一个参数 *argv,这仅仅意味着我们可以根据需要传递任意数量的参数。现在在函数中,我们应用了 for each 循环,我们正在打印循环中的每个元素。

因此,我们向函数传递了四个字符串参数,并成功打印了它们。

示例 2

我们可以使用此关键字传递字符串以及整数数据类型。因此,可以有不同数据类型的参数。

输出

**args and **kwargs in Python

说明

在上面的代码中,我们传递了字符串和整数参数,并使用了 *argv 关键字,并通过 for 循环打印了它们。

示例 3

通过可变长度参数,我们还可以向函数添加任何普通参数。

输出

**args and **kwargs in Python

说明

在函数调用中,第一个参数将是普通参数,而后续参数将作为可变参数列表的一部分。

注意:如果我们为 *args 之后传递了额外的普通参数,它将引发错误。

输出

**args and **kwargs in Python

说明

在上面的代码中,由于最后一个参数已被包含在 *args 关键字中,因此它会因找不到最后一个参数而产生错误。

Python 中的 **kwargs

当我们将关键字参数作为函数的参数传递时,使用此关键字。关键字参数意味着我们将名称赋给每个变量,这个列表以键值对字典的形式存储。变量的名称是键,变量的值是键的值。

示例 1

输出

**args and **kwargs in Python

说明

在上面的代码中,我们有一个函数,它以 **kwargs 的形式接受参数。参数以键值对的形式存储,所以我们传递了带有名称的四个参数。现在,如果我们使用关键字的 items() 函数进行迭代,我们可以打印变量的键-值对。

注意:我们可以同时在函数中传递关键字参数和非关键字参数。

示例 2

输出

**args and **kwargs in Python

说明

在上面的代码中,我们在函数中同时使用了 *args 和 **kwargs 关键字,并打印了所有参数。在函数调用中,我们传递了一些非关键字参数,然后传递了一些关键字参数。当我们打印非关键字参数时,它以列表形式打印;如果我们打印关键字参数,它以键值对的字典格式打印。