目录
关键字 def
def 函数名(参数1,参数2,参数3):
函数体
return 表达式
下面是一个计算的简单函数,名为add():
- def add():
- a = 1 + 6 * 4
- b = a + 4
- print(b)
- add()
要使用这个函数,可调用它。函数调用让Python执行函数的代码,由于add()函数没有指定任何参数,所以要调用函数,直接指定函数名即可。
可以通过函数名后面的括号传递参数,下面是一个带有位置参数的函数,名为run_cases():
- def run_cases(num):
- for case in range(num):
- print(f'正在执行第{}条用例')
- # 调用函数传入的参数其实就是去给函数定义的时候的变量去赋值
- run_cases(10)
设置位置参数的原则:
关于函数的参数传递,需要注意如下几点:
形式参数与实际参数的区别:
关键字参数指的是在调用具有参数默认值的函数时,使用参数的关键字来指定为哪个参数赋值。下面是一个带有关键字参数的函数,名为run_cases():
- def run_cases(a,b,c):
- for case in range(a):
- print(f'正在执行第{}条用例')
- print(b + c)
- run_cases(a=5,c=3,b=4)
关键字参数的作用:
位置参数和关键字参数的混合时的注意点:
默认参数,在定义函数时给予默认值,调用函数时不需要给予默认参数。
def 函数名(...,形参名,形参名=默认值)
代码块
注意⚠️
- def run_cases(a,b,c=3)
- for case in range(a):
- print(f'正在执行第{case}条用例')
- print(b+c)
- # 不给c传实际参数
- # 默认参数的作用:可以不传参数
- run_cases(1,4)
预先不知道函数需要接受多少个实参,所以Python中有一个动态参数的概念,随便你传递多少个的参数给函数,它都全盘接受,并在函数体内做进一步处理。
- def add(*args):
- print(args)
- add(1,2,3,4)
打印出来的结果都是元组类型,那么无论你传递多少个参数进来,它都会把这些参数存储到一个元组里面。比如可以去计算任意个数数字的总和:
- def add(*args):
- sum = 0
- for item in args:
- sum += item
- print(sum)
- add(1,2,3,4)
大家应该充分体验到了动态参数带来的便利,当我们面对不知道要传递多少个参数的函数时,就可以利用动态参数这个用法。
带有关键字的动态参数,与普通动态参数的区别就是:带有关键字,且必须指定关键字,否则识别不了。
- def run(a,**b):
- # b 就是把剩下的关键字参数全部都放到一起(字典)
- print(a)
- print(b)
-
-
- run(3,H='fuyao',Z='zhishang')
传入的带有key值的参数,都被转成了字典,所以当你传入的值不确定个数的时候又要组成字典,那么我们就可以用这种形式去做处理。
- def add(a,b=4,c=5,*args,**kwargs):
- print('a+b+c的结果是:',a+b+c)
- sum = 0
- # args 就是把剩下的位置参数全部都放到一起(元组)
- for item in args:
- sum += item
- print('动态参数的累加结果是:',sum)
- # kwargs 就是把剩下的关键字参数全部都放到一起(字典)
- print('关键字动态参数是:',kwargs)
- # 调用函数
- add(1,2,3,4,5,6,x=1,y=2)
根据传递的参数,我们可以看到是优先处理位置参数,然后剩余的参数传递给args,带有关键字的参数传给kwargs。
然而现实中,自动化测试用例中有很多数据(url、方法、参数等),存那么多变量不太现实,那我们可以将多个数据存在一个变量中,此时就会用到拆包了。
1)*args:把元组中的数据进行拆包,也就是把元组中的数据拆成单个数据。
- def run(a,b,c):
- print(a)
- print(b)
- print(c)
-
- args = [6,7,8]
- # *args 是把所有的列表/元组元素拆分,脱衣服
- run(*args)
2)**kwargs:用来接收key=value这种类型的命名参数,把字典中的数据进行拆包。
- def run(a,b,c):
- print(a)
- print(b)
- print(c)
-
- # 关键字参数调用
- kwargs = {"a":6,"b":7,"c":8}
- # **是把字典转化成关键字参数的
- run(**kwargs)
上面我们写的函数,调用函数的结果都直接输出在控制台,其实并非所有的函数都会直接输出在控制台,如果我们要拿到这个函数的运行结果,那么就需要用return语句,将函数的运行结果返回来,由你去做进一步的处理。
- def run_cases(a=1,b=3,c=3):
- for case in range(a):
- print(f'正在执行第{case}条用例')
- print(b + c)
- return 5
- # 不会执行下面这条语句
- print('函数执行完了吗')
- print(run_cases())
返回值需要注意:
Python中的全局变量与局部变量的区别:全局变量与局部变量两者的本质区别就是在于作用域。
全局变量是在整个py文件中声明,全局范围内都可以访问;局部变量是在某个函数中声明,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就会报错。
一般全局变量会用大写字母来标志,如果是局部变量,就会用小写字母来标志。
- A = 66 # 全局变量
- def add():
- a = 100 # 局部变量
- print(a+A)
-
- add() # 打印结果是166
- print(A) # 打印结果是66
- print(a) # 报错:NameError:name 'a' is not defined
- a = 1 # 全局变量
- def run():
- b = 2 # 局部变量
- print(b)
- return b
- print(a)
- run()
- A = 66 # 全局变量
- def add():
- a = 100 # 局部变量
- print(A+A)
-
- add() # 打印结果是200
- print(A) # 打印结果是66
- A = 66 # 全局变量
- def add():
- global A
- A = 100 # 局部变量
- print(A+A)
-
- add() # 打印结果是200
- print(A) # 打印结果是100
- list_1 = ['hello',20]
- def add():
- list_1.append(99)
- print(list_1)
- add() # 打印结果是['hello',20,99]
- print(list_1) # 打印结果是['hello',20,99]
内置函数:Python官方自带的函数,不需要自己定义。
可看以下示例:对表达式的结果进行计算,返回计算后的值
- a = "1 + 5 + 3"
- print(eval(a)) # 脱掉字符串左右两边的衣服
将输入的字符串转为对应的数据类型,列表、元组、字典等数据类型都可以使用这种方式输入
- response = '{"username":"sun","age":16}'
- print(type(response))
- a = eval(response)
- print(type(a))
- a = sum([3,4,5,6])
- print(a)