系列文章目录
Day01 软件测试基础总结
Day02 测试用例知识点总结(上)
Day03 测试用例知识点总结(下)
Day04 禅道-从安装到卸载
Day05 MySql的基础使用
Day06 MySql知识点总结
Day07 MySql知识点再总结与多表查询
Day08 redis的基础知识
Day08 VMware的安装、Linux系统安装和Linux基础命令
Day09 Linux常用命令总结
Day10 Linux环境部署和项目构建
Day11 shell脚本基础知识
Day12 接口和协议
Day13 Postman的使用
Day13 Windows环境下的JDK安装与Tomcat的启动
Day14 jenkins部署
Day15 jenkins的简单使用
Day16 charles的基本使用
Day17 考试
Day18 考试
Day19 Fiddler的简单使用
Day20 Python基础
Day21 python 语句基础
Day22 Python数据类型(上)
Day23 Python数据类型(下)
Day24 Python函数
文章目录
目录
前言
函数与变量
一、什么是函数
在开发程序时,需要某块代码多次执行,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数。
二、函数定义和调用
格式:
def 函数名():
执行语句
函数名() #调用函数
def aMethod(a,b):
sum=a+b
print(sum)
return sum
aMethod(3,4)
'''
7
'''
定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它,通过 函数名() 即可完成调用。
每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了,如果函数中执行到了return也会结束函数。
三、函数参数
1.位置参数
格式:
def 函数名(参数1,参数2):
代码块
函数名(值1,值2)
def aMethod(a,b,c):
print('a',a)
print('b',b)
print('c',c)
aMethod(1,2,3)
print('== == == == == == == == ==')
aMethod(3,1,2)
'''
a 1
b 2
c 3
== == == == == == == == ==
a 3
b 1
c 2
'''
定义时小括号中的参数,用来接收参数,称为 “形参”
调用时小括号中的参数,用来传递给函数,称为 “实参”
2.关键字参数
格式:
def 函数名(参数1,参数2):
代码块
函数名(参数1=值1,参数2=值2)注意:参数调用时,可以改变传参顺序,如果有位置参数需要位置参数放在关键字参数前面
def aMethod(a,b,c):
print('a',a)
print('b',b)
print('c',c)
aMethod(c=1,b=2,a=3)
print('== == == == == == == == ==')
aMethod(3,1,c=2)
'''
a 3
b 2
c 1
== == == == == == == == ==
a 3
b 1
c 2
'''
注意:第二次使用函数时,形式参数a和b为位置参数,只有c为关键字参数,关键字参数要在位置参数之后,各类参数是在定义函数时就决定好的,不是在调用函数时定义谁是关键字参数,比如:aMethod(3,a=1,b=2)这样是一定会报错的
3.缺省参数
在形参中默认有值的参数,称之为缺省参数
函数有缺省参数,调用时不填缺省参数,会使用定义时的值如b,调用时重新定义则改为调用时传入的值如c,a为位置参数,缺省参数一定要位于位置参数的后面
def aMethod(a,b=2,c=3):
print('a',a)
print('b',b)
print('c',c)
aMethod(3,c=2)
'''
a 3
b 2
c 2
'''
4.不定长参数
有时可能需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名
格式:
def printinfo(*args,**kwargs):
print("args:",args)
print("kwargs:",kwargs)
printinfo(参数)
def aMethod(*args,**kwargs):
print('args',args)
print('kwargs',kwargs)
aMethod(1,2,3,4,'5',[6,7],(8,9),{'a':10},b=11,c='12')
'''
args (1, 2, 3, 4, '5', [6, 7], (8, 9), {'a': 10})
kwargs {'b': 11, 'c': '12'}
'''
注意:加了星号(*)的变量args会存放所有未命名的变量参数,args为元组而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典
5.参数位置顺序
格式:
def fun(位置参数,*args,缺省参数,**kwargs):
代码块
fun(参数值)
def sun(a,*args,b=22,**kwargs):
print("a:",a)
print("args:",args)
print("b:",b)
print("kwargs:",kwargs)
sun(100,200,300,b=2,m=3,n=4)
'''
a: 100
args: (200, 300)
b: 2
kwargs: {'m': 3, 'n': 4}
'''
注意:如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的
6.函数返回值
格式:
def sum():
代码块
return 值
sum()
def sum(a,b):
return a+b
print(sum(3,4))
'''
7
'''
return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据
def sum(a,b):
return a+b,a-b,a*b,a/b
print(sum(3,4))
'''
(7, -1, 12, 0.75)
'''
注意:一个函数中可以有多个return语句,但是只要有一个return语句被执行到,那么这个函数就会结束了,因此后面的return没有什么用处
def sum(a,b):
return a+b
print('!!!!')
print(sum(3,4))
'''
7
'''
7.函数类型
1. 无参数,无返回值 一般情况下,打印提示等,类似的功能使用此类函数
2. 无参数,有返回值 一般情况下,像采集数据使用此类函数
3. 有参数,无返回值 一般情况下,对某些变量设置数据而不需结果时,用此类函数
4. 有参数,有返回值 一般情况下,像数据处理并需要结果的应用,用此类函数
8.函数的嵌套
一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用
def sum(a,b,c):
return a+b+c
def avg(a,b,c):
return sum(a,b,c)/3
def difference(a,b,c):
return a-avg(a,b,c),b-avg(a,b,c),c-avg(a,b,c)
print(difference(1,2,3))
'''
(-1.0, 0.0, 1.0)
'''
如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次 函数A执行的位置
def a():
print('a start')
b()
print('a end')
def b():
print('b start')
print('b run')
print('b end')
a()
'''
a start
b start
b run
b end
a end
''
9.匿名函数
lambda函数也叫匿名函数,即函数没有具体的名称
sum=lambda a,b:a+b
print(sum)
print(sum(1,2))
'''
<function <lambda> at 0x000001D205AC51F0>
3
'''
二、变量
1.局部变量
局部变量,就是在函数内部定义的变量
其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
def test1():
a = 120
print("我是局部变量a:",a)
a = 240
print("修改之后的局部变量a:",a)
def test2():
a =360
print("我是test02函数中的局部变量a",a)
test1()
test2()
'''
我是局部变量a: 120
修改之后的局部变量a: 240
我是test02函数中的局部变量a 360
'''
注意:局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了
2.全局变量
在函数外边定义的变量叫做全局变量
全局变量能够在所有的函数中进行访问
a = 100
def test1():
print(a) # 虽然没有定义变量a但是依然可以获取其数据
def test2():
print(a) # 虽然没有定义变量a但是依然可以获取其数据
# 调用函数
test1()
test2()
'''
100
100
'''
全局变量的修改使用global,注意一定是先调用使用了global方法的函数,才能改变全局变量,如下面的例子,如果不先调用test1,直接调用test2,则变量a仍等于100
注意:在函数中出现global 全局变量的名字 那么这个函数中即使出现和全局变量名相同的变量名 = 数据也理解为对全局变量进行修改,而不是定义局部变量
a = 100 #全局变量
def test1():
global a,b #将a,b变成全局变量
global c
a= 300
b= 100
c=200
print("修改后的a", a)
print("修改后的b", b)
print("修改后的c", c)
def test2():
print(a)
print(b)
print(c)
# 调用函数
test1()
test2()
'''
修改后的a 300
修改后的b 100
修改后的c 200
300
100
200
'''