python *args 、**kwargs的用法、多参数默认值设置

*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"})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值