如何在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