*args的使用例子:
def abc(h, *argv):
print("1%s:"%h)
for arg in argv:
print("2:%s:"%arg)
abc('ysdss', 'ggggg', 6666, 'mmfdf')
在你不确定将要传递多少参数给函数时,可以定义*agrv参数,调用函数时,可以传递任意个参数给函数,第一个参数对应h,剩余参数作为 元组 传递给argv参数,可以通过 argv[i]的方式访问argv参数的数据。
**kwargs使用例子:
def greet_me(**kwargs):
print(type(kwargs))
for key, value in kwargs.items():
print("{0} == {1}".format(key, value))
**kwargs
允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用**kwargs
。
调用函数时,可以传递任意个键值对给函数,所有参数作为 元组 传递给kwargs参数,kwargs参数为字典类型,可以通过访问字典的方式访问kwargs参数的数据。
如果你想在函数里同时使用 普通参数、*args、**kwargs 三种参数, 顺序是这样的:
some_func(fargs, *args, **kwargs)
在接口自动化中,有些请求会有非常多的参数,我们就不能一个个参数写出来,这样非常冗余且繁琐,比如下面,这样定义函数,1、参数太多,很冗余 2、后续如果要增加参数,必须修改函数定义
def send(a,b,c,d,e,f,g,h=1,i=None,z=True):
print(i)
send(a=2,b=6,c=8,d=9,e=80,f=54,g=533,h=1,i=None,z=True)
可以将以上写法换成使用**kwargs,
def send(**kwargs):
print(kwargs)
print(kwargs["i"])
send(a=2,b=6,c=8,d=9,e=80,f=54,g=533,h=1,i=None,z=True)
执行结果如下:
可以看到, 参数以字典的形式传入kwargs,后续增加参数,不需要改函数定义
那么对于kwargs传入的参数怎么赋予默认值呢?
使用 kwargs.__contains__("encoding")判断传入的参数是否存在encoding字段,使用if 的三母运算,如果不存在则使用默认值
def test(**kwargs):
a={"encoding": kwargs["encoding"] if kwargs.__contains__("encoding") else "UTF-8"}
print(a)
test()
test(encoding="dsada")
我们还可以使用另外的写法,赋予默认值,
1、先将函数所需的参数列举出来,存放在字典data中,并设置默认值,后面使用字典合并,赋予字典的字段新的值
def test(name, a_dict={}):
data={"name":name,"value":3223,"other":""}
data={**data,**a_dict}
print(data)
test("dadaa",{"value":"Dsadasd"})