python函数的可变参数是什么,如何使用?

  • Post category:Python

Python函数的可变参数指的是函数定义时不确定参数数量的情况下,可以使用的特殊参数类型。在Python中,可变参数包括两种类型,分别是*args**kwargs,下面我们分别来介绍一下。

*args可变参数

*args表示将所有的位置参数(不包括关键字参数)打包成一个元组(tuple)并传递给函数,那么函数内部就可以通过访问这个元组来获取参数的值。

使用方法如下:

def func(*args):
    # 访问args元组
    for arg in args:
        print(arg)

# 调用函数传入多个参数
func(1, "hello", [1,2,3])

代码执行结果为:

1
hello
[1, 2, 3]

从这个例子中可以看出,不管我们传入多少个参数,最终都会打包成一个元组。在函数内部,可以通过使用for循环遍历整个元组,并访问其中的每个元素。

同时,我们也可以对传入的参数进行解包,并进行单独的访问,代码如下所示:

def func(a, b, *args):
    print(a)
    print(b)
    for arg in args:
        print(arg)

# 调用函数传入多个参数
func(1, "hello", [1,2,3], 4, True)

代码执行结果为:

1
hello
[1, 2, 3]
4
True

从这个例子中可以看出,我们可以将前两个参数进行解包,而后面的参数则会被打包成一个元组传入函数内部。

**kwargs可变参数

**kwargs表示将所有的关键字参数打包成一个字典(dict)并传递给函数,那么函数内部就可以通过访问这个字典来获取参数的值。

使用方法如下:

def func(**kwargs):
    # 访问kwargs字典
    for key, value in kwargs.items():
        print("{}:{}".format(key, value))

# 调用函数传入多个关键字参数
func(name="Jack", age=25, gender="male")

代码执行结果为:

name:Jack
age:25
gender:male

从这个例子中可以看出,不管我们传入多少个关键字参数,最终都会打包成一个字典。在函数内部,可以通过使用for循环遍历整个字典,并访问其中的每个键值对。

同时,我们也可以混合使用*args**kwargs来实现对不确定参数类型、数量的处理,示例代码如下:

def func(a, b, *args, **kwargs):
    print(a)
    print(b)
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print("{}:{}".format(key, value))

# 调用函数并传入多种类型、数量的参数
func(1, "hello", [1,2,3], 4, True, name="Jack", age=25, gender="male")

代码执行结果为:

1
hello
[1, 2, 3]
4
True
name:Jack
age:25
gender:male

从这个例子中可以看出,我们可以在函数定义的时候加入*args**kwargs,来处理不确定类型、数量的参数。然后在函数内部通过访问元组和字典来获取参数的值。

需要注意的是,在传入参数时,*args**kwargs需要放在前面,示例代码如下:

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

# 加*args和**kwargs在后面会报错
def wrong_func(a, b, **kwargs, *args):
    pass