返回博客

在代码中使用 *args 和 **kwargs 参数:Python 3 教程

在代码中使用 *args 和 **kwargs 参数:Python 3 教程

介绍

Python 是全球最受欢迎的编程语言之一。在 Python 中,参数是函数定义的一部分。它们使您能够为函数指定某些实参。该实参可以被函数接收并应用。

然而,在编写代码时,您不可能知道您的代码可能会实现哪些确切的使用场景。因此,为了方便未来的程序员和您程序的用户,建议向函数传递可变数量的参数。为此,您必须使用特殊的参数。它们是 *args**kwargs。在本教程中,我们将全面学习 *args**kwargs 参数。我们还将学习如何对参数进行排序,以及如何在函数调用中应用它们。

前提条件

为了能够按照本教程中的步骤进行操作,您需要准备一些前提条件。首先,您需要在您的服务器上安装 Python 3,并运行编程环境。您还需要安装适用于您特定操作系统的程序(Ubuntu, CentOS、Debian 等)。

什么是 *args,它是如何工作的?

让我们首先来了解 *args 是如何工作的。该参数的单星号版本用于向函数发送非关键字的可变长度参数列表。请记住,星号是该参数中最关键的元素。

为了更好地理解,让我们来看一个例子。以下是您在代码中可能会遇到的一个典型函数,它使用了两个参数:

如您所见,我们在上述函数中的参数是 xy。在调用该函数时,您将使用对应于 xy 的数字。假设我们分别为 54 传递整数 xy :

现在我们可以运行代码:

我们将收到的输出如下:

输出显示整数 5 和 4 已经相乘。这意味着 multiply(x, y) 函数起作用了。

现在,假设我们最终想要将三个数字相乘,而不仅仅是两个。不幸的是,向上述函数添加一个额外的数字会给您带来如下错误:

因此,如果您预料到以后可能需要添加更多参数,那么为了方便起见,请应用 *args 参数。您可以像这样使用它:

我们只需将 xy 函数参数替换为 *args。运行此代码将为您提供每个函数调用的乘积,如下所示:

因此, *args 非常适合在您想要向函数发送可变长度参数列表时使用。由于它的这种能力,您可以向函数调用传递任意数量的参数。因此,该参数允许您构建更灵活的代码,从而可以接受大量可变的、非关键字的参数到函数中。

什么是 **kwargs,它是如何工作的?

接下来,我们有双星号版本的参数,即 **kwargs。与前一种形式不同,此参数允许您将关键字化的、可变长度的参数字典传递到函数中。类似于 *args,双星号是该参数最关键的元素。

正如我们在上一节中所做的那样,您可以根据需要添加任意数量的参数。区别在于您必须分配关键字。为了更好地理解,请考虑以下示例。在这里,我们将首先打印出 **kwargs 我们想要传递给函数的参数:

现在,让’我们调用该函数。如您所见,我们添加了关键字参数:

此时运行程序将显示以下输出:

然而,您的字典数据类型有可能是无序的。这在很大程度上取决于您使用的 Python 3 版本。例如,Python 3.6 之后的任何版本都会按顺序为您提供键值对。在此之前的任何版本都将以随机顺序显示输出。您创建的字典将被命名为 kwargs。请注意,您可以像系统上的任何其他字典一样使用和操作它。让我们看看如何将 **kwargs 参数投入更大范围的使用和应用中。

在以下示例中,我们将尝试创建一个新函数,该函数将向包含名字的字典致意。我们的示例字典将包含两个名字:

运行程序将为您提供以下输出:

与前面的示例类似,字典可能会显示为无序。因此,在某些情况下,名字 Casey 和 Sammy 的顺序可能会颠倒。

接下来,我们将向函数传递额外的参数。这将证明您可以让 **kwargs 接受您想要的任意数量的参数:

运行程序将显示以下输出:

此输出也可能是无序的。无论如何,这些示例表明 **kwargs 为您的程序提供了使用多个关键字参数的灵活性。

How to Order Arguments

在函数或函数调用中对参数进行排序时,务必牢记设定的顺序。如下所示:

  1. Formal positional arguments

  2. *args

  3. Keyword arguments

  4. **kwargs

让’我们假设您正在使用 *args**kwargs 具有显式位置参数。这意味着您的函数将如下所示:

另一方面,将这些参数与命名关键字参数一起使用,将使您的函数具有以下通用结构:

不遵守设定的顺序会在运行代码时导致语法错误。因此,最好从一开始就避免犯这种错误。

如何在函数调用中使用 *args 和 **kwargs

最后,我们将向您展示如何使用这两个参数将参数传递到函数中。我们将从一个示例开始,该示例显示了 *args:

此函数中有三个参数: arg_1, arg_2,以及 arg_3。您必须创建一个变量并将其设置为可迭代对象。在这种情况下,它将是一个 tuple。然后,您可以使用星号语法将该变量传递到函数中。

使用以下命令运行程序时,观察输出: python some_args.py 命令:

也可以将程序更改为可迭代的列表 数据类型,并使用不同的变量作为名称。以下代码结合了 *args 与命名参数:

运行程序时的输出如下:

另一方面,您可以使用 **kwargs 应用关键字参数。确保创建一个等于字典的变量。它应该有 2 个键值对。以下是我们如何将该变量传递给具有 3 个参数的函数的方法:

再次使用 python some_kwargs.py 命令来运行程序:

结论

在本教程结束时,您应该已经熟练掌握了什么是 *args**kwargs 以及它们是如何工作的。您现在可以将这些参数应用到您自己的代码中,使您的程序对未来的用户更加灵活。这些非常适合您不知道可能会使用多少个参数的情况。只需确保注意函数和参数的关键要素即可。

最后,这里有更多来自我们博客的资源,将帮助您成功使用 Python:

祝您编程愉快!

author

Pranay Kapgate

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。