python中的*args和**kwargs

对于*args和**kwargs,其实名称是无所谓的,叫阿猫阿狗都可以,关键是运算符*和**。

在python中向函数传递参数的方式有两种:位置参数和关键字参数

*args 表示任何多个无名参数, 他本质上是一个 tuple

** kwargs 表示关键字参数, 它本质上是一个 dict

当args、*args、**kwargs同时出现在函数的形参列表中的时候,**kwargs要放在最后、其次是*args、最后是args

那么*和**究竟是什么作用呢?

一言以蔽之:就是拆包装包

def test_var_args(args, *argv):
    print("first normal args:",args)
    for arg in argv:
        print("another arg through *argv:",arg)
test_var_args('yasoob','python','eggs','test')

以这上面的代码为例,调用函数的时候,形参args接受了‘yasoob’;其余三个字符串是独立的,并没有以任何数据结构组织起来,所以在调用时运算符*就将其“装包了”。同理,如果函数的第二个参数是a,a=['python','eggs','test'],   此时argv是什么呢。答案是(['python','eggs','test'],)。也就是说实参会被装包。

但如果实参中是*args,形参中是argv1,argv2,argv3,则传入的a中的‘python’‘eggs’‘test’会被分别传给argv1、argv2、argv3.

**kwargs只不过是键值对的而已,所以在传入的时候也要以键值对的形式传入形参,如:

print_func(a=1, b=2, c='呵呵哒', d=[])
kwargs = {"arg3": 3,"arg2":"two","arg1":5}
test_args_kwargs(**kwargs)

图二是实参情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值