详解Python 函数参数解包

  • Post category:Python

Python 函数参数解包是一种非常方便的技巧,可以让我们在调用函数时用一种更加简洁的方式传递参数。

使用 * 解包位置参数

首先,我们可以使用 * 符号来解包位置参数。具体来说,就是在函数定义时,在参数列表前面加上 * 符号,表示这些参数应当被解包成位置参数。在调用函数时,我们可以将一个列表或元组解包为单独的位置参数。

def my_func(x, y, z):
    print(f"x={x}, y={y}, z={z}")

my_list = [1, 2, 3]
my_func(*my_list)  # 等价于 my_func(1, 2, 3)

在上面的示例中,我们定义了一个需要三个位置参数的函数 my_func,然后定义了一个包含三个元素的列表 my_list。最后,我们将 my_list 解包为单独的位置参数,传递给 my_func 函数。

使用 ** 解包关键字参数

除了位置参数,我们也可以使用 符号来解包关键字参数。与位置参数类似,我们可以在定义函数时,在参数列表前面加上 符号,表示这些参数应当被解包成关键字参数。在调用函数时,我们可以将一个字典解包为单独的关键字参数。

def my_func(x, y, z):
    print(f"x={x}, y={y}, z={z}")

my_dict = {"x": 1, "y": 2, "z": 3}
my_func(**my_dict)  # 等价于 my_func(x=1, y=2, z=3)

在上面的示例中,我们定义了一个需要三个关键字参数的函数 my_func,然后定义了一个包含三个键值对的字典 my_dict。最后,我们将 my_dict 解包为单独的关键字参数,传递给 my_func 函数。

使用 * 和 ** 同时解包位置参数和关键字参数

最后,我们还可以同时使用 * 和 符号来解包位置参数和关键字参数。在这种情况下,* 符号必须在 符号之前出现。

def my_func(x, y, z):
    print(f"x={x}, y={y}, z={z}")

my_list = [1, 2]
my_dict = {"z": 3}
my_func(*my_list, **my_dict)  # 等价于 my_func(1, 2, z=3)

在上面的示例中,我们定义了一个需要三个参数的函数 my_func。首先,我们定义了一个包含两个元素的列表 my_list,和一个包含一个键值对的字典 my_dict。然后,我们将 my_list 解包为单独的位置参数,将 my_dict 解包为单独的关键字参数,传递给 my_func 函数。