python函数参数化 python unittest 参数化

python 函数参数类型 python python函数参数化的函数参数类型分为4种:
1.位置参数:调用函数时根据函数定义的参数位置来传递参数python函数参数化,位置参数也可以叫做必要参数python函数参数化,函数调用时必须要传的参数 。
当参数满足函数必要参数传参的条件,函数能够正常执行:
add(1,2)#两个参数的顺序必须一一对应,且少一个参数都不可以
当我们运行上面的程序,输出:
当函数需要两个必要参数 , 但是调用函数只给python函数参数化了一个参数时,程序会抛出异常
add(1)
当我们运行上面的程序,输出:
当函数需要两个必要参数,但是调用函数只给了三个参数时,程序会抛出异常
add(1,2,3)
当我们运行上面的程序,输出
2.关键字参数:用于函数调用,通过“键-值”形式加以指定 。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求 。
add(1,2) # 这种方式传参,必须按顺序传参:x对应1,y对应:2
add(y=2,x=1) #以关健字方式传入参数(可以不按顺序)
正确的调用方式
add(x=1, y=2)
add(y=2, x=1)
add(1, y=2)
以上调用方式都是允许的,能够正常执行
错误的调用方式
add(x=1, 2)
add(y=2, 1)
以上调用都会抛出SyntaxError 异常
上面例子可以看出:有位置参数时,位置参数必须在关键字参数的前面 , 但关键字参数之间不存在先后顺序的
3.默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值,所有位置参数必须出现在默认参数前,包括函数定义和调用 , 有多个默认参数时 , 调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数 。当不按顺序提供部分默认参数时 , 需要把参数名写上
默认参数的函数定义
上面示例第一个是正确的定义位置参数的方式 , 第二个是错误的,因为位置参数在前,默认参数在后
def add1(x=1,y) 的定义会抛出如下异常
默认参数的函数调用
注意:定义默认参数默认参数最好不要定义为可变对象 , 容易掉坑
不可变对象:该对象所指向的内存中的值不能被改变,int,string,float,tuple
可变对象 , 该对象所指向的内存中的值可以被改变,dict,list
这里只要理解一下这个概念就行或者自行百度 , 后续会写相关的专题文章讲解
举一个简单示例
4.可变参数区别:定义函数时,有时候我们不确定调用的时候会多少个参数,j就可以使用可变参数
可变参数主要有两类:
*args: (positional argument) 允许任意数量的可选位置参数(参数),将被分配给一个元组, 参数名前带* , args只是约定俗成的变量名 , 可以替换其他名称
**kwargs:(keyword argument) 允许任意数量的可选关键字参数,,将被分配给一个字典,参数名前带**,kwargs只是约定俗成的变量名,可以替换其他名称
*args 的用法
args 是用来传递一个非键值对的可变数量的参数列表给函数
语法是使用 符号的数量可变的参数; 按照惯例,通常是使用arg这个单词,args相当于一个变量名,可以自己定义的
在上面的程序中,我们使用* args作为一个可变长度参数列表传递给add()函数 。在函数中,我们有一个循环实现传递的参数计算和输出结果 。
还可以直接传递列表或者数组的方式传递参数,以数组或者列表方式传递参数名前面加(*) 号
理解* * kwargs
**kwargs 允许python函数参数化你将不定长度的键值对, 作为参数传递给函数,这些关键字参数在函数内部自动组装为一个dict
下篇详细讲解 *args, **kwargs 的参数传递和使用敬请关注
python-函数可变参数类型python中的函数,大多需要配置参数 , 以下是几种函数的参数类型:
1.必备参数:以正确的顺序、个数传入函数 。调用时的参数情况要和声明时一样 。最常用的情况 。
def tplink(a,b):
c=a b b
return c
tplink(4,2)
2.关键字参数:使用关键字参数允许函数调用时参数的顺序和声明时不一致,因为python解析器会在调用函数时,用参数名匹配参数值 。
def tplink(age1,age2):
【python函数参数化 python unittest 参数化】ageall=age1 age2 age2
return ageall
tplink(age2=4,age1=2)
3.默认参数:默认某个参数的取值
def tplink(age1,age2=5):
ageall=age1 age2 age2
return ageall
tplink(age1=4)
4.不定长参数:在声明时并不确定 调用时的参数数量 。这种情况 , 可以用不定长参数进行解决,具体操作是在参数名前用* 。
但不能和 关键字参数并用 。一般在正常参数arg之后 。
*args、**kwargs的定义:
这两个都是python中的不定长参数,又称为可变参数 。
*args 表示任何多个无名参数 , 它是一个 tuple ;
**kwargs 表示关键字参数 , 它是一个dict 。
同时使用 * args和 ** kwargs 时 , 必须 * args参数列要在 ** kwargs前 。且都在arg之后 。
函数在调用时,会根据顺序,看是否放进 *args 或者 **kwargs中 。
具体可根据实际情况使用 , 可以 更方便灵活的接收信息 。
python中parameter用法很多小伙伴想问python中python函数参数化的parameter是个什么东西?那么小编就通过这篇文章来给大家分享一下关于parameter的相关知识点,希望大家能够通过阅读之后对自己的能力有所提升 。
?
Parameter定义就是:形参,指的是函数中的参数名称:
def add(x,y):此处x,y为形参 。return x y
下面是python中参数的总结
#1、位置参数:按照从左到右的顺序定义的参数位置形参:必选参数 位置实参:按照位置给形参传值
#2、关键字参数:按照key=value的形式定义的实参无需按照位置为形参传值 注意的问题: 1. 关键字实参必须在位置实参右面 2. 对同一个形参不能重复传值
#3、默认参数:形参在定义时就已经为其赋值可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参) 注意的问题: 1. 只在定义时赋值一次 2. 默认参数的定义应该在位置形参右面 3. 默认参数通常应该定义成不可变类型
#4、可变长参数:可变长指的是实参值的个数不固定 而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args , **kwargs
#5、命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递python函数参数化!
Python基础之pytest参数化pytest是目前比较成熟功能齐全的测试框架 , 使用率肯定也不断攀升 。在实际
工作中,许多测试用例都是类似的重复,一个个写最后代码会显得很冗余 。这里 , 我们来了解一下
@pytest.mark.parametrize装饰器,可以很好的解决上述问题 。
释义:参数名称
格式:字符串"arg1,arg2,arg3"
释义:参数值列表
格式:必须是列表,如[val1,val2,val3]
单个参数,里面是值的列表 , 如@pytest.mark.parametrize("name",["Jack","Locus","Bill"])
多个参数,需要用元祖来存放值,一个元祖对应一组参数的值,如@pytest.mark.parametrize("user,age",[("user1",15),("user2",24),("user3" , 25)])
释义:可以理解为用例的id
格式:字符串列表,如["case1","case2","case3"]
释义:当indirect=True时,若传入的argnames是fixture函数名,此时fixture函数名将成为一个可执行的函数,
argvalues作为fixture的参数,执行fixture函数,最终结果再存入 request.param;当indirect=False时,fixture
函数只作为一个参数名给测试收集阶段调用 。
备注:这里可以将the setup phase(测试设置阶段)理解为配置 conftest.py 阶段,将the collection phase(
测试收集阶段)理解为用例执行阶段 。
由以上代码可以看到,当装饰器装饰测试类时,定义的数据集合会被传递给类的所有方法 。
当测试用例只需要一个参数时,我们存放数据的列表无序嵌套序列,@pytest.mark.parametrize("name", data)
装饰器的第一个参数也只需要一个变量接收列表中的每个元素,第二个参数传递存储数据的列表,那么测试用
例需要使用同名的字符串接收测试数据(实例中的name)且列表有多少个元素就会生成并执行多少个测试用例 。
当测试用例需要多个数据时,我们可以使用嵌套序列(嵌套元组嵌套列表)的列表来存放测试数据 。
装饰器@pytest.mark.parametrize()可以使用单个变量接收数据,也可以使用多个变量接收,同样,测
试用例函数也需要与其保持一致 。
当使用单个变量接收时,测试数据传递到测试函数内部时为列表中的每一个元素或者小列表,需
要使用索引的方式取得每个数据 。
当使用多个变量接收数据时,那么每个变量分别接收小列表或元组中的每个元素列表嵌套多少个多
组小列表或元组,测生成多少条测试用例 。
通过测试结果,我们不难分析,一个测试函数还可以同时被多个参数化装饰器装饰 , 那么多个
装饰器中的数据会进行交叉组合的方式传递给测试函数,进而生成n * n个测试用例 。
输出结果显示收集到4个用例,两个通过 , 一个被跳过,一个标记失败,当我们不想执行某组测试
数据时,我们可以标记skip或skipif;当我们预期某组数据会执行失败时,我们可以标记为xfail等 。
参数化装饰器有一个额外的参数ids,可以标识每一个测试用例 , 自定义测试数据结果的显示,
为了增加可读性,我们可以标记每一个测试用例使用的测试数据是什么 , 适当的增加一些说明 。
在使用前你需要知道,ids参数应该是一个字符串列表,必须和数据对象列表的长度保持一致 。
不加ids参数的返回结果
加ids参数的返回结果
我们可以看到带ids参数的返回结果中的用例都被一个列表明确的标记了,而且通过这种标记
可以更加直观的看出来,每个测试用例使用的数据名称及测试内容 。
关于python函数参数化和python unittest 参数化的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读