详解Python 函数参数*args和**kwargs

  • Post category:Python

Python 函数参数 args 和 *kwargs 的使用方法

在 Python 中,*args**kwargs 分别用于处理不定数量的位置参数和关键字参数,方便编程者编写更为灵活的代码。

*args

*args,用来发送一个非键值对的可变数量的参数列表给一个函数。通常,我们将它作为函数定义中的最后一个形参。你可以向这个函数传递任意数量的非键值对的参数。

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

foo(1, 2, 3, 4, 5)

上述示例中,foo 函数接受了一个特殊的参数 *args,用来传递不确定个数的参数,这里我们传递了 5 个数值参数,依次输出了 1, 2, 3, 4, 5。

**kwargs

**kwargs 允许你将不定长度的键值对,作为参数传递给一个函数。和 *args 类似, **kwargs 需要放置于函数定义中最后一个形参位置。

def bar(**kwargs):
    for key, value in kwargs.items():
        print(f'{key}={value}')

bar(name='Jack', age=20, gender='Male')

上述示例中,bar 函数接受了一个特殊的参数 **kwargs,用来传递不确定个数的键值对参数,这里我们传递了 3 个键值对参数,依次输出了 ‘name=Jack’, ‘age=20’, 和 ‘gender=Male’。

args 与 *kwargs 的组合使用

如果我们想要在一个函数中同时使用 *args**kwargs,则应该将 *args 放在 **kwargs 之前。

def zoo(a, b, *args, **kwargs):
    print(f'a: {a}')
    print(f'b: {b}')
    print(f'args: {args}')
    print(f'kwargs: {kwargs}')

zoo(1, 2, 3, 4, name='Tom', age=21, gender='Female')

上述示例中,zoo 函数接受了一个非键值对参数 a,一个非键值对参数 b,一个任意数量的位置参数 *args,以及一个任意数量的键值对**kwargs。在调用时,我们传递了 2 个非键值对参数以及 3 个位置参数和 3 个键值对参数。依次输出了 a: 1, b: 2, args: (3, 4), kwargs: {‘name’: ‘Tom’, ‘age’: 21, ‘gender’: ‘Female’}。

总结

以上,我们完成了 Python 函数参数 *args**kwargs 的使用方法介绍, *args**kwargs 一起使用可以满足其它代码无法满足的需求。理解了这两个参数的作用和基本用法,我们可以编写更加高效和灵活的代码。