Python中的可变函数指的是函数可以接受可变长度参数的特殊类型函数。在函数定义时,参数前面加上星号(*)可以让该参数接受可变长度的参数,在函数体内被当做元组使用。而可以接受可变长度参数的函数被称为可变函数,也叫做不定长参数函数。
使用可变函数时,闭包内可以访问任意个参数,包括位置参数和关键字参数,这些参数被封装进一个元组和一个字典中,然后传递给函数体。
在 Python 中操作可变长度参数最常用的是 args 和 *kwargs 两种方式。
- *args
在函数声明的参数列表前加上 * ,表示这个函数可以接受任意个数的位置参数,在函数内部,这些参数会被组合成一个元组。使用时调用函数时传入的参数会被组成元组,作为函数的形参,即 args 值。下面是一个示例代码:
def my_sum(*args):
s = 0
for i in args:
s += i
return s
print(my_sum(1, 2, 3)) # 6
- **kwargs
在函数声明的参数列表前加上 ** ,表示这个函数可以接受任意个数的关键字参数,在函数内部,这些参数会被组合成一个字典。使用时调用函数时传入的参数会被组成字典,作为函数的形参,即 kwargs 值。下面是一个示例代码:
def my_dict(**kwargs):
d = kwargs
return d
print(my_dict(a=1, b=2)) # {'a': 1, 'b': 2}
在使用可变函数时,需要注意以下几个点:
- 可变函数的位置必须在其他参数后面。
- 当存在 args 参数时,不管后面个数的参数是位置参数还是关键字参数,都会被赋值给 args 元组;
- 当存在 kwargs 参数时,不管后面参数是位置参数还是关键字参数,都会被赋值给 kwargs 字典。
最后,还要注意参数的顺序,参数必须按照以下顺序:
def func(fargs, *args, **kwargs):
pass
其中 fargs 是一个普通的位置参数,args 和 *kwargs 是可变长度参数。