科普一下Python中星号的用法

电子说

1.3w人已加入

描述

01

用做不定长参数名

可以接收多个参数值

案例1:比如我定义一个求和的函数,无论传入几个值,都可以计算出求和的结果

代码1.1:

生成器

问题:以上代码实现传入2个参数值的和,但是如何我要求的是大于2个参数值的和,如:10+20+30=或者 1+2+3+4+5+..=这种情况下我们必须要重写add方法,往里面去加参数名,但是这种情况下,扩展性太差,脚本的维护性也不好。

因此我们的不定长参数的出现,就可以在不重写add方法的前提下,也能满足求多个参数值的和。

代码1.2:

生成器

总结:*num(不定长参数),可以接收0个或者N个值,接收的值会存储在一个元组中;调用函数的时候,要使用位置传值,也就是直接写值就可以。

02

用做解包,将可迭代对象中的元素解包

案例2:比如我定义一个函数,无论传入几个值,都可以计算出从传入值的和与乘积的结果,并获取和与积的结果

代码2.1:

生成器

总结:除了列表对象可以解包之外,任何可迭代对象都支持解包;可迭代对象包括元组、字典、集合、字符串、生成器实现了__next__方法的一切对象。但是字典解包后,只会把字典的 key 取出来,value 则丢掉了。

代码2.2:

生成器

解包也可以用在参数值的传递中

代码2.3:

生成器

总结:调用add方法时,直接传入一个tpl元组,则*num会把整个元组值作为一个参数值传入,就会变成((10,20),),那么对于add方法中的循环则无法计算结果。所以我们在调用函数时,将*tpl传入,会现将这个元组整体解包为2个元素值传入,用*num接收后就变成了(10,20)。这个时候对于add中的循环就可以去进行计算了。

03

常运用场景

结合DDT用作测试用例的多次执行

案例3:执行百度搜索,第一次搜索柠檬班,第二次搜索软件测试

代码3.1:

生成器生成器




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分