python解包什么意思_Python中 * 和 ** 的打包和解包,你真的理解了吗?

Python中 * 和 ** 的打包和解包,你真的理解了吗?

python中的 * 和 ** ,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的。* 的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量args。

** 的作用:在函数定义中,收集关键字参数到一个新的字典,并将整个字典赋值给变量kwargs。

* 的作用:在函数调用中,* 能够将元组或列表解包成不同的参数。

** 的作用:在函数调用中,** 会以键/值的形式解包一个字典,使其成为一个独立的关键字参数。

在函数定义时, * 表示打包,在函数体内部, * 表示的却是解包,事实上,下面例子中print(*args)是print()函数的调用。

* 和 ** 的打包和解包并不能脱离函数而存在。如下的例子中,表面上看没有调用什么函数,实际上调用了format()函数。

参考源码中对format函数的定义。

这里为什么不用print()函数而用format()呢?可以试试print()函数来解包。

因为print()函数只支持 *args,不支持 **kwargs,源码附上。

已知接口自动化中all_caseDatas是有N个字典组成的列表,@ddt.data(*all_caseDatas)中,data()是一个函数。调用函数时,参数*all_caseDatas自动将列表[{...}, {...}, {...}...]解包为{...}, {...}, {...}...,再传递给测试用例函数test_my_request(),这就是@ddt.data将每一条数据作为一条测试用例的原理。

ddt中data()函数的源码。

今日互动:Python中* 和 ** 的打包和解包,看了这篇文章,你理解了吗?有任何问题可以在留言区给我们留言哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值