python的魔法函数*args 和 **kwargs
概要
定义一个函数的参数前面*(星号)args 和**kwargs。比如var 和 **vars也可以,只是一个命名定义规则。
含义:*args是把元祖(非关键字参数)作为参数传递给函数,**kwargs是字典(关键字参数)键值对形式传递给函数
1、*args的用法
用来发送一个非键值对的可变数量的参数列表给一个函数
示例一:
1. def A(*args):
print(args)
A('aaa')
输出结果:(‘aaa’,)
示例二:
def A(*args):
print(args)
#变量是元组形式
def A(*args):
print(args)
#变量是元组形式
arg = ('aaa','1','2')
ls = ['bbb','1','2']
#如果变量是一个元组或者列表,输出变量的每一个值则用[*变量名]
A(arg)
A(*arg)
A(ls)
A(*ls)
依次输出结果如下:
(('aaa', '1', '2'),)
('aaa', '1', '2')
(['bbb', '1', '2'],)
('bbb', '1', '2')
2、 **kwargs的用法
kwargs允许你将不定长度的键值对(字典),作为参数传递给一个函数。如果你想要在一个函数里处理带名字的参数,你应该使用kwargs。
示例一
def A(**kwargs):
print(kwargs)
#定义字典变量
ks = {'aaa':1,'bbb':2,'ccc':3}
#调用A方法
A(**ks)
结果输出:
{‘aaa’: 1, ‘bbb’: 2, ‘ccc’: 3}
示例二
def A(**kwargs):
print(kwargs)
#a'='1的形式传参
A(a=1,b=2)
输出结果
{‘a’: 1, ‘b’: 2}
*args 和 **kwargs 结合使用
*args 和 **kwargs 结合,那么就要定义一个元组和字典类型数据
定义元组以及字典类型
自定义函数,包含*args和**kwargs
def func(argument, *args, **kwargs):
print(argument,args,kwargs)
定义元组以及字典类型
tuple = (1, 2)
dict = {
'a': 1,
'b': 2
}
调用函数,传入参数
注意位置参数和关键字参数的顺序
func(*tuple , **dict)
输出结果
1 (2,) {'a': 1, 'b': 2}
自定义的入参可不传,输出结果则是空
定义元组以及字典类型
自定义函数,包含*args和**kwargs
def func(argument, *args, **kwargs):
print(argument,args,kwargs)
# 定义元组以及字典类型
```python
aa = 1
tuple = (1, 2)
dict = {
'a': 1,
'b': 2
}
# 调用函数,传入参数
# 注意位置参数和关键字参数的顺序
# func(*tuple , **dict)
#函数有三个参数,自定义的入参可不传,输出结果则是空
#可见argument 对应aa,**dict 对应**kwargs,则*args未传参则为空
func(aa,**dict)
输出结果
1 () {‘a’: 1, ‘b’: 2}