Python 中的星号原来可以这么用 ~~

2305 篇文章 32 订阅
1785 篇文章 16 订阅

01 用做不定长参数名

可以接收多个参数值

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

代码1.1:

def add(num1,num2):
    return num1 + num2

res = add(10,20)
print(res)   #  输出结果:30

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

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

代码1.2:

def add(*num):
    sum = 0
    for i in num:
        sum += i
    return sum

res = add(10,20)
print(res)   #  输出结果:30

res2 = add(10,20,30)
print(res2)   #  输出结果:60

res3 = add(1,2,3,4,5)
print(res3)   #  输出结果:15

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

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

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

代码2.1:

def add_mul(*num):
    sum = 0
    mul = 1
    for i in num:
        sum += i
    for i in num:
        if i == 0:
            mul = 0
        else:
            mul *= i
    return sum,mul

res = add_mul(10,20)
print(res)   #  输出结果:(30,200)  -->这个一个元组整体

# 方式一:可以声明2个变量来接收返回的值
res1,res2 = add_mul(10,20)
print('和:',res1)  # 输出结果:和:30
print('积:',res2)  # 输出结果:积:200

# 方式二:可以在得到的res结果前面加上一个*号,会自动将里面的元素解包出来
res3 = add_mul(10,20)
print(*res)   #  输出结果:30 200  -->这是元组中的2个元素

总结:除了列表对象可以解包之外,任何可迭代对象都支持解包;可迭代对象包括元组、字典、集合、字符串、生成器实现了__next__方法的一切对象。

但是字典解包后,只会把字典的 key 取出来,value 则丢掉了。

代码2.2:

dit = {'id':1001,'name':'lemon'}
print(*dit)  # 输出结果:id name

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

代码2.3:

def add(*num):
    sum = 0
    for i in num:
        sum += i
    return sum

tpl = (10,20)
lst = [10,20,30]

res1 = add(*tpl)  # 将元组(10,20)解包位2个值,分别是10,20
print(res1)   #  输出结果:30

res2 = add(*lst) # # 将列表[10,20,30]解包位3个值,分别是10,20,30
print(res2)   #  输出结果:60

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

03 常运用场景

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

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

代码3.1:

# coding = utf-8
import unittest
from selenium import  webdriver
from ddt import ddt,data
import time

# 百度搜索的测试数据
test_date = ['柠檬班','软件测试']

@ddt
class TestBaidu(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com')

    @data(*test_date)  # 接收测试数据,并将列表整体解包为2个值
    def test(self,txt): # txt用来接收解包后的每一个值
        print('在百度搜索中输入:',txt)
        self.driver.find_element_by_id('kw').send_keys(txt)  # 在搜索框中输入对应的值
        self.driver.find_element_by_id('su').click()

    def tearDown(self):
        time.sleep(3)
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

图片

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】
在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值