如何在Python中使用*args和**kwargs?
在本文中,我们将讨论*args
和**kwargs
属性及其在Python中的用法。
为了向函数传递未指定数量的参数,通常使用*args
和**kwargs
属性。*args
属性用于向函数调用发送非关键字变量长度的参数,而**kwargs
关键字用于向函数传递关键字长度的参数。
- 关键字参数(或参数)是在函数调用中由标识符“=”引导的值,例如“name=”。
-
使用
*args
和**kwargs
的主要优点是可读性和方便性,但应谨慎使用。
注意 - 不一定需要编写*args
和**kwargs
。只需要星号(*
)即可。例如,您也可以编写*var
和**vars
。
更多Python相关文章,请阅读:Python 教程
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; 它可以是任何东西。在这种情况下,它是数字。然而,*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)))
输出
以下是上述代码的输出 –
小工具的净金额为:70500
小工具的净金额为:115768
小工具的净金额为:145965
注意 − 参数名称不一定为kwargs; 可以是任何名称。此示例中为 items。 不过,通常接受使用**kwargs
作为名称。
在函数调用中使用*args
和**kwargs
我们可以使用*args
和**kwargs
向函数传递参数。
示例
此函数中标识出三个参数 “laptop”、 “smartphone” 和 “earphone”。该函数将打印每个参数的值。然后,使用星号语法,我们可以将一个变量传递到函数中,该变量设置为可迭代的(在本例中为元组),如下所示 –
def gadgets(laptop, smartphone, earphone):
print('第一个小工具是:',laptop)
print('第二个小工具是:',smartphone)
print('第三个小工具是:',earphone)
args = ('Lenovo','Samsung','JBL')
gadgets(*args)
输出
使用 python gadgets.py 命令,我们可以运行该程序并得到下面所示的输出 –
第一个小工具是: Lenovo
第二个小工具是: Samsung
第三个小工具是: JBL
注意 - 以上程序也可以更改为使用可迭代列表数据类型和替代变量名称。同时将命名参数与*args语法结合使用:
def gadgets_price(laptop, smartphone, earphone):
print('第一个小工具的价格为:',laptop)
print('第二个小工具的价格为:',smartphone)
print('第三个小工具的价格为:',earphone)
list = [15438,499]
gadgets_price(54000,*list)
以上代码的输出结果如下 –
第一个小工具的价格为: 54000
第二个小工具的价格为: 15438
第三个小工具的价格为: 499
示例
类似地,您可以使用关键字参数**kwargs
参数调用函数。我们将创建一个名为kwargs的变量,它将表示具有三个键值对的字典,但您可以随意使用它的名称,并将其提供给具有三个参数的函数,如下所示 –
def gadgets_price(laptop, smartphone, earphone):
print('第一个小工具的价格为:',laptop)
print('第二个小工具的价格为:',smartphone)
print('第三个小工具的价格为:',earphone)
kwargs = {'laptop':54678, 'smartphone':15893, 'earphone':499}
gadgets_price(**kwargs)
输出
使用 python some gadgets_price.py 命令,我们可以运行该程序并得到下面所示的输出 –
第一个小工具的价格为: 54678
第二个小工具的价格为: 15893
第三个小工具的价格为: 499