python基础之函数
前言
本文主要介绍函数的定义和调用、函数参数分类、函数的作用域以及常用内置函数4个模块。
一、函数定义和调用
1、语法:
def 函数名称():
函数要执行的代码程序
#定义一个求和的函数 def add(): a=3 b=4 print(a+b)
2、调用
函数名()
#定义一个求和的函数 def add(): a=3 b=4 print(a+b) add()
输出结果:
7
3、return的用法
return:表示函数的返回值,返回值是函数执行完成以后,得到的计算结果。return有返回值后,函数外部若要使用该计算结果,可以使用print()函数打印出来。
def add(): a=3 b=4 return a+b print(add())
当函数中遇到rerurn后,函数就会终止执行,如下所示:
def add(): a=3 b=4 return a+b print("继续") result = add() print(result)
输出结果:7
可以看出return a+b下面的print("继续")这段代码是没有执行的。
当函数中定义return时可以不带参数,但没有带参数时,返回值为None
def add(): a=3 b=4 return result = add() print(result)
输出结果:

二、函数参数分类及使用
下面将介绍实际参数、形式参数、位置参数、关键字参数、默认参数、不定长参数(可变参数:不定长位置参数、不定长关键字参数)。
实际参数:函数调用时提供的参数;形式参数:函数定义时的参数。例如下面的def add(a,b)中的“a”和“b”就是形式参数,result=add(3,4)中的"3"和"4"就是实际参数。
def add(a,b): sum = a+b return sum result = add(3,4) print(result)
位置参数:函数在定义的时候,若设定有形式参数,那么在函数调用时必须保持和函数定义时的参数数量和位置,否则就会抛出 TypeError 异常,并提示缺少必要的位置参数。
def add(a,b): print(f"a={a}") print(f"b={b}") a=3 b=4 add(a,b)
输出结果:

def add(a,b): print(f"a={a}") print(f"b={b}") a=3 b=4 add(b,a)
输出结果:

def add(a,b): print(f"a={a}") print(f"b={b}") a=3 b=4 add(a)
输出结果:

默认参数:函数在定义时,提供一个默认值,如:b="hello world",当定义默认值参数后,实际传参时可以不传该参数值
def add(a,b="hello world"): print(f"a={a}") print(f"b={b}") a=3 b=4 add(a)
输出结果:

当传递了实际参数后,设定的默认值参数“hello world”会被替换成"name"
def add(a,b="hello world"): print(f"a={a}") print(f"b={b}") a=3 b="name" add(a,b)
输出结果:

关键字参数:用来标记实际参数到底是哪个变量的。不需要实际参数的位置与形式参数的位置完全一致。
def add(a,b,c): print(f"a={a}") print(f"b={b}") print(f"c={c}") a=3 add(a,c="password",b="name")
输出结果:

但需要注意的是:不管关键字参数还是默认参数,都要放到位置参数的后面。
关键字参数调用时,放在位置参数前面会报错。
def add(a,b,c): print(f"a={a}") print(f"b={b}") print(f"c={c}") a=3 add(c="password",b="name",a)
输出结果:

默认参数定义时,放在位置参数前面会报错:
def add(a,b="hello world",c): print(f"a={a}") print(f"b={b}") print(f"c={c}") a=3 add(a,c="password",b="name")

不定长参数(可变参数):不定长参数分为不定长位置参数(*args)和不定长关键字参数(**kwargs)。
不定长位置参数在函数内打印出来是一个元组,定义一个不定长位置参数*b,输入a=3,b=4,输出结果b是一个元组b =(4,)
def add(a,*b): print(f"a={a}") print(f"b={b}") # print(f"c={c}") a=3 b=4 add(a,b)
输出结果:

不定长位置参数传入多个实际参数时:
def add(a,*b): print(f"a={a}") print(f"b={b}") # print(f"c={c}") a=3 b=4 add(a,b,3,4,5,6)
输出结果:

元组拆包:定义了一个元组,在函数调用的时候,在元组的前面加一个*,就会把元组的两边括号去掉,相当于传递的参数为add(3,2,3,4)
def add(a,*b): print(f"a={a}") print(f"b={b}") # print(f"c={c}") a=3 b=(2,3,4) add(a,*b)
不定长关键字参数:接收所有的关键字参数,在函数内打印出来是一个字典
def add(a,*b,**c): print(f"a={a}") print(f"b={b}") print(f"c={c}") a=3 add(a,2,3,4,x=10,y=20)
输出结果:

字典拆包:定义了一个字典,在函数调用的时候,在字典的前面加两个**,就会把字典的两边括号去掉,相当于传递的参数是key=value形式的关键字参数。
def add(a,*b,**c): print(f"a={a}") print(f"b={b}") print(f"c={c}") a=3 b=(2,3,4) c={"x":10,"y":20} add(a,*b,**c)

三、函数的作用域
主要介绍全局变量和局部变量的用法。
1、定义
全局变量:在函数外定义的变量;局部变量:在函数内定义的变量。
def get_name(): #局部变量 name="xiaofenggou" print(name) #全局变量 a="小疯狗" print(a) get_name()
2、全局变量可以和局部变量同名
def get_name(): #局部变量 name="xiaofenggou" print(name) #全局变量 name="小疯狗" print(name) get_name()
输出结果:

3、在函数内(局部)可以使用全局变量
def get_name(): #局部变量 # name="xiaofenggou" print(name) #全局变量 name="小疯狗" print(name) get_name()
输出结果:

4、在全局不能直接使用局部变量
def get_name(): #局部变量 name="xiaofenggou" print(name) #全局变量 # name="小疯狗" print(name) get_name()

5、函数内(局部)修改全局变量(需要声明)
def get_name(): #局部直接使用全局变量 name=name+"xiaofenggou" print(name) #全局变量 name="小疯狗" print(name) get_name()

使用global声明name是一个全局变量
def get_name(): #声明全局变量 global name name=name+"xiaofenggou" #打印全局变量 print(name) #全局变量 name="小疯狗" print(name) get_name() print(name)

四、常用内置函数
1、enumerate():用于同时获取列表的索引和元素
def get_name(): for index,i in enumerate(name): print(index,i) print(enumerate(name)) #全局变量 name=["小疯狗",2,3] get_name()
输出结果:

2、eval():把字符串两边的引号去掉,同时变成可执行的python代码
def get_name(): for index,i in enumerate(name): print(index,i) print(enumerate(name)) #eval print(eval(age)) #全局变量 name=["小疯狗",2,3] age="1+5" get_name()
输出结果:

eval()将字符串转为字典
def get_name(): for index,i in enumerate(name): print(index,i) print(enumerate(name)) #eval print(type(string)) print(type(eval(string))) #全局变量 name=["小疯狗",2,3] string='{"name":"xiaofenggou","age":18}' get_name()
输出结果:

3、max():求最大值;min():求最小值
4、sum():求和
5、range():创建一个列表,一般用于for循环
如下图所示:start和step可以省略不写,都省略后取值范围[0-10),step默认值为1
def get_name():
#range(start,end,step) for i in range(0,10,2): print(i) get_name()

6、id():用于获取对象在内存中的地址,用于判断两个变量是否是同一个对象
def get_name(): print(id(string)) print(id(string2)) string="小疯狗" string2="小疯狗" get_name()
输出结果

7、zip():将可迭代对象打包成一个元组,然后可转化为列表或者字典。可以用于文件读取测试用例。
def get_name(): print(zip(list1,list2)) print(list(zip(list1,list2))) print(dict(zip(list1,list2))) list1=["name","age","sex"] list2=["xiaofenggou",18,"男"] get_name()
输出结果:


浙公网安备 33010602011771号