【Python】*args,**kwargs 及打包、解包

*args表示可以传入任意数量的“值变量”,**kwargs表示可以传入任意数量的键值变量。

*args必须写在**kwargs前面。


函数定义时,*和**表示打包。即*把传入的一系列“值变量”打包成一个 tuple 元组,存入变量 args;**把传入的一系列键值变量打包成一个字典,存入变量 kwargs。

函数调用时,*和**表示解包。即*把一个 tuple 或 list 等打散成一个个元素;**表示把一个字典打散成一个个键值。

举个例子:

def func(*args, **kwargs):
    print(args)
    print(kwargs)

    apple = [*args]    # list:['aaa', (1, 2, 3), 4, 5, 6]
    banana = [*kwargs]    # list:['x', 'y', 'a', 'b']
    print(apple)
    print(banana)


a = (1, 2, 3)
b = (4, 5, 6)
d = {'a': 11, 'b': 22}
func("aaa", a, *b, x=111, y="bbb", **d)


# 输出
('aaa', (1, 2, 3), 4, 5, 6)
{'x': 111, 'y': 'bbb', 'a': 11, 'b': 22}
aaa (1, 2, 3) 4 5 6
x y a b

 func("aaa", a, *b, x=111, y="bbb", **d)

首先 *b 和 **d 对 b 和 d 解包,打散成元素和键值;

然后将 "aaa", a, *b 打包作为 args,x=111, y="bbb", **d 打包作为 kwargs,args 和 kwargs 分别为元组和字典;

函数内的解包 *args,将元组 args 解包成一个个元素;*kwargs 将字典按照元组的形式解包,打散成key。**解包字典好像不能脱离函数,暂时无法独立使用(挠头


解包字典

(1)直接获取values:

d = {'a': 11, 'b': 22}
a, b = d.values()    # int:11 int:22
dv = d.values()    # dict_values:([11, 22])

(2)直接获取keys:

d = {'a': 11, 'b': 22}
a, b = d.keys()    # str:'a' str:'b'
dk = d.keys()    # dict_keys:(['a', 'b'])

(3)**解包输出values:

print可以传入*args参数,但无法传入**kwargs,需要使用.format()

d = {'a': 11, 'b': 22}
print("{a} {b}".format(**d))

# 输出
11 22

(4)*解包输出keys:

上面提到的,用*解包得到的就是keys

d = {'a': 11, 'b': 22}
print(*d)

#输出
a b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值