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

Python函数中*args与**kwargs的使用

发布时间:2023-06-07 14:14:06

在Python中,*args与**kwargs是常见的两个参数形式,它们被广泛用于函数的定义中,可以使函数更加灵活。在本文中,我们将了解这两个参数的用途及其在函数中的使用方法。

1. *args

在函数中,*args是一个用于接收可变数量位置参数的特殊符号。它将所有传递给函数的位置参数打包成一个元组(tuple)对象,这样函数就可以处理可变数量的参数。下面是一个使用*args的简单示例:

def add_nums(*args):
    total = 0
    for num in args:
        total += num
    return total

print(add_nums(1, 2, 3, 4, 5))  # 输出15

在这个例子中,我们定义了一个函数add_nums,它接收任意数量的位置参数。函数内部使用for循环对这些参数进行求和操作。在函数调用时,我们可以传递任意数量的参数,这些参数会以元组的形式被传递到函数中。

2. **kwargs

**kwargs是另一个用于处理可变数量的参数的特殊符号,不同的是它处理的是关键字参数。它将传递给函数的关键字参数打包成一个字典(dict)对象,这样函数就可以处理可变数量的关键字参数。下面是一个使用**kwargs的简单示例:

def display_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

display_info(name='Bob', age=30, city='New York')  # 输出:name: Bob age: 30 city: New York

在这个例子中,我们定义了一个函数display_info,它接收任意数量的关键字参数。函数内部使用for循环遍历这些参数,并输出它们的键值对。在函数调用时,我们可以传递任意数量的关键字参数,这些参数会以字典的形式被传递到函数中。

3. *args与**kwargs的混用

除了分别使用*args和**kwargs处理位置参数和关键字参数之外,我们还可以混用它们。这样的使用方式是非常常见的,在函数的定义中,我们可以使用下面这个模式:

def my_func(*args, **kwargs):
    # 函数体代码

这样定义的函数可以同时接收任意数量的位置参数和关键字参数。这意味着,我们可以传递任意数量的位置参数和关键字参数给函数,它们会被分别打包成元组和字典,然后传递到函数中。

下面是一个使用*args和**kwargs混用的简单示例:

def display_person_info(*args, **kwargs):
    for arg in args:
        print(arg)
    print('
')
    for key, value in kwargs.items():
        print(f"{key}: {value}")

display_person_info('Bob', 30, 'New York', occupation='Engineer', salary=50000)
"""
输出:
Bob
30
New York


occupation: Engineer
salary: 50000
"""

在这个例子中,我们定义了一个函数display_person_info,它接收任意数量的位置参数和关键字参数。函数内部使用for循环遍历这些参数,并输出它们的值。在函数调用时,我们传递了三个位置参数和两个关键字参数,这些参数会被分别打包成元组和字典,然后传递到函数中。

总结

*args和**kwargs是Python中常用的参数形式,它们使得函数在接收任意数量的位置参数和关键字参数时更加灵活。在函数的定义中,我们可以使用*args和**kwargs单独处理位置参数和关键字参数,或者混合使用它们处理任意数量的参数。如果你经常写Python函数,那么*args和**kwargs应该是你必须了解的重要参数形式之一。