欢迎访问宙启技术站
智能推送

*args和**kwargs是什么?如何使用它们?

发布时间:2023-06-16 11:58:00

*args 和 **kwargs 是 Python 中的两个特殊参数,它们常用于函数定义中,对于函数的参数数量和类型不确定的情况,可以非常方便地进行处理。

1. *args

*args 可以接受任意数量的参数,并把它们放在一个元组中传递给函数。因为参数数量不固定,所以函数的定义可以如下所示:

def func(*args):
    for arg in args:
        print(arg)

上述函数可以接受任意数量的参数,然后把它们逐个打印出来。下面是一个使用 *args 的例子:

>>> def add(*args):
...     result = 0
...     for arg in args:
...         result += arg
...     return result
...
>>> print(add(1, 2, 3, 4)) # 输出10

在上面的例子中,参数 1,2,3,4 都会被传递给函数 add(),然后通过循环依次累加,最后返回结果 10。

2. **kwargs

与 *args 不同,**kwargs 可以接受任意数量的关键字参数,并把它们放在一个字典中传递给函数。同样因为参数数量不固定,所以函数的定义可以如下所示:

def func(**kwargs):
    for key, value in kwargs.items():
        print(key, value)

在上述函数中,接受到的关键字参数会被转换成一个字典,然后依次遍历该字典,并打印出每个键值对。下面是一个使用 **kwargs 的例子:

>>> def display(**kwargs):
...     print("姓名:{}".format(kwargs.get("name")))
...     print("年龄:{}".format(kwargs.get("age")))
...     print("性别:{}".format(kwargs.get("gender")))
...
>>> display(name="张三", age=20, gender="男")
姓名:张三
年龄:20
性别:男

在上面的例子中,关键字参数 name,age 和 gender 都会被传递给函数 display(),然后通过字典获取其中的值,并打印出来。

3. *args 和 **kwargs 的组合使用

在一个函数中,*args 和 **kwargs 可以同时使用,以处理不固定数量和类型的参数。如果同时使用这两个特殊参数,则应该先使用 *args,然后是普通参数,最后是 **kwargs,就像这样:

def func(*args, arg1, arg2, **kwargs):
    pass

在上面的函数定义中,*args 接受任意数量的无名参数,arg1 和 arg2 是必需的参数,**kwargs 接受任意数量的关键字参数。使用上述函数时,无名参数会被保存在 args 元组中,相应的关键字参数会被保存在 kwargs 字典中。示例如下:

>>> def func(*args, arg1, arg2, **kwargs):
...     for arg in args:
...         print(arg)
...     print(arg1)
...     print(arg2)
...     for key, value in kwargs.items():
...         print(key, value)
...
>>> func(1, 2, 3, arg1="value1", arg2="value2", name="lily", age=18)
1
2
3
value1
value2
name lily
age 18

在上述示例中,参数 1,2,3 被传递给了 *args,参数 arg1 和 arg2 被传递给了函数的普通参数,而关键字参数 name 和 age 则被 **kwargs 接受。函数的执行结果是依次打印了无名参数、arg1 和 arg2 的值,以及 kwargs 字典中的键值对。

总结:

*args 和 **kwargs 是 Python 中的两个特殊参数,它们分别可以接受任意数量的无名参数和关键字参数,并把它们装在元组和字典中传递给函数。使用这两个参数可以非常方便地处理不固定数量和类型的参数。