args和*kwargs
首先,*args
和 **kwargs
的命名是可以任意的,也可以随便叫\*vars
或者 \*kws
。
*args
就是可变参数罢了,它以一个数组的形式对外呈现。
定义函数的时候,如果不想指定参数的数量,就可以用\*args
来替代。
def print_numbers(*args):
for i in args:
print(i)
print_numbers(1, 2, 3, 4)
类似Java中的可变参数
public void print_numbers(int... numbers){
......
}
但是可变参数的类型需要保持一致,否则根本不知道调用者传什么类型的参数,容易出错。
另外需要注意的是,*args后面的参数,需要指定变量传参,否则会报错,如下面这个例子
def print_numbers(*args, a, b, c):
pass
# 如果写print_numbers(1,2,3,4,5,6)则执行的时候报错提示a,b,c未传值
print_numbers(1,2,3,a=4, b=5, c=6)
**kwargs
就是一个键值对的对象,它以字典的形式对外呈现,即{"key":"value", "key2":"value2"...}
。
def print_numbers(**kwargs):
for key, value in kwargs.items():
print(f"{key}:{value}")
print_numbers(name="sonny", age=18)
在这个例子中,调用的时候,name="sonny"
就是以字典的形式传入kwargs
中。
需要注意的是: **kwargs后面不能跟其他参数,也就是说,**kwargs要放最后面