如何在 Python 中使用 *args 和 **kwargs?


在本文中,我们将讨论 *args 和 **kwargs 属性及其在 Python 中的用法。

为了将未指定数量的参数传递给函数,通常使用 *args 和 **kwargs 属性。*args 属性用于向函数调用发送非关键字可变长度参数,而 **kwargs 关键字用于向函数传递关键字长度的参数。

  • 关键字参数(或参数)是在函数调用中以标识符“=”开头的值,例如“name=”。

  • 使用 *args 和 **kwargs 的主要好处是可读性和方便性,但应谨慎使用。

注意 - 不一定需要写 *args 和 **kwargs。只需要星号(*)。例如,您也可以写 *var 和 **vars。

在 Python 中使用 *args

要在函数中传递可变数量的非关键字参数,我们需要在参数名称前使用星号 (*)

示例

以下是在使用 *args 的函数中传递参数的示例 -

def multiply (*args):
   print(args, type(args))
multiply(6,78)

输出

因此,我们可以确信,接收这些提供参数的方法会创建一个元组,其名称与参数相同,但不包括 *。

(6, 78) <class 'tuple'>

示例

现在让我们将可变数量的参数乘以我们的 multiply() 函数,如下例所示 -

def multiply(*args):
   x = 1
   for i in args:
      x = x * i
   print ('The product of the numbers is:',x)
multiply(5,87)
multiply(8,11)
multiply(6,9,4,7)
multiply(2,11,98)

输出

以下是上述代码的输出 -

The product of the numbers is: 435
The product of the numbers is: 88
The product of the numbers is: 1512
The product of the numbers is: 2156

注意 - 参数的名称不必是 args;它可以是任何东西。在本例中是 numbers。但是,使用 *args 作为名称是普遍接受的。

在 Python 中使用 **kwargs

我们可以通过使用 **kwargs 向 Python 函数提供任意数量的关键字参数。

要在函数中指示这种类型的参数,我们在参数名称前使用双星号 (**) 表示存在一个具有可变长度的关键字参数字典。

示例

以下是在使用 **kwargs 的函数中传递参数的示例 -

def gadgets_price(**kwargs):
   print(kwargs,type(kwargs))
gadgets_price(laptop= 60000, smartphone=10000, earphones =500)

输出

参数作为字典传递,并在函数内部创建一个字典,其名称与参数相同,除了 **,如您所见。

{'laptop': 60000, 'smartphone': 10000, 'earphones': 500} <class 'dict'>

示例

现在让我们完成 gadgets_price() 函数以返回所有小工具的总金额,如下例所示

def gadgets_price(**items):
   total = 0
   for price in items.values():
      total += price
   return total
print('The net amount of the gadgets is:',(gadgets_price(laptop= 60000, smartphone=10000, earphones =500)))
print('The net amount of the gadgets is:',(gadgets_price(laptop= 60000, smartphone=10000, desktop =45768)))
print('The net amount of the gadgets is:',(gadgets_price(laptop= 60000, TV=85965)))

输出

以下是上述代码的输出 -

The net amount of the gadgets is: 70500
The net amount of the gadgets is: 115768
The net amount of the gadgets is: 145965

注意 - 参数的名称不必是 kwargs;它可以是任何东西。在本例中是 items。但是,使用 **kwargs 作为名称是普遍接受的。

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

我们可以使用 *args 和 **kwargs 将参数传递给函数。

示例

函数中识别出三个参数,分别是“laptop”、“smartphone”和“earphone”。函数将打印出每个参数。然后,使用星号语法,我们可以向函数提供一个设置为可迭代对象(在本例中为元组)的变量,如下例所示 -

def gadgets(laptop, smartphone, earphone):
   print('The first gadget is of:',laptop)
   print('The second gadget is of:',smartphone)
   print('The third gadget is of:',earphone)
args = ('Lenovo','Samsung','JBL')
gadgets(*args)

输出

使用 python gadgets.py 命令,我们可以运行程序并获得如下所示的输出 -

The first gadget is of: Lenovo
The second gadget is of: Samsung
The third gadget is of: JBL

注意 - 上述程序也可以更改为使用可迭代列表数据类型和替代变量名称。让我们也结合命名参数和 *args 语法

def gadgets_price(laptop, smartphone, earphone):
   print('The first gadget is of price:',laptop)
   print('The second gadget is of price:',smartphone)
   print('The third gadget is of price:',earphone)
list = [15438,499]
gadgets_price(54000,*list)

上述代码的输出如下 -

The first gadget is of price: 54000
The second gadget is of price: 15438
The third gadget is of price: 499

示例

同样,您可以使用关键字 **kwargs 参数调用函数。我们将创建一个名为 kwargs 的变量,它将表示一个具有三个键值对的字典,但您可以将其命名为任何您喜欢的名称,并将其提供给具有三个参数的函数,如下所示 -

def gadgets_price(laptop, smartphone, earphone):
   print('The first gadget is of price:',laptop)
   print('The second gadget is of price:',smartphone)
   print('The third gadget is of price:',earphone)
kwargs = {'laptop':54678, 'smartphone':15893, 'earphone':499}
gadgets_price(**kwargs)

输出

使用 python some gadgets_price.py 命令,我们可以运行程序并获得如下所示的输出 -

The first gadget is of price: 54678
The second gadget is of price: 15893
The third gadget is of price: 499

更新于: 2022-12-19

2K+ 次查看

启动你的 职业生涯

通过完成课程获得认证

开始
广告