python 函数
函数:是组织好的,可重复使用的,用来实现特定功能的代码段
为什么使用代码:为了得到一个特定需求,可供重复利用的代码段,提高程序的复用性,减少重复性代码,提高开发效率
函数的定义
def 函数名(传入参量):
函数体
return 返回值
函数的调用:函数名(参数)
注意:
参数如不需要,可以省略
返回值不需要,可以省略
函数先定义后使用
函数的参数
函数的传入参数
传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据
程序:
def add(x,y):
result=x+y
print(f'{x}+{y}的结果是;{result}')
add(5,6)
实现了,每次计算的是x+y,而非固定的1+2
x+y的值,可以在调用函数的时候指定
在函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数 参数之间使用逗号隔开
函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时进行真正使用的参数值,传入时,按照顺序传入数据,使用逗号隔开
传入参量的数量不受限制,可以不使用,也可以是N个参数
函数返回值
程序:def add(a,b)
result=a+b
return result
r=add(1+2)
print(r)
定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者,所以,变量r接受到了函数的执行结果。
作用:所谓返回值,就是程序中函数完成事情后,最后给调用者的结果
语法格式: def 函数(参数.....):
函数体
return 返回值
变量名=函数(参数)
函数体遇到return后就结束了,所以写在return后的代码不会执行
返回值的None类型
不管写不写return都会有返回值,不写默认返回None 表示空,无实际意义
场景应用,用在函数无返回值上;用在if判断上,在if判断中,None等同于False(假),一般用于函数中主动返回None,配合if判断做相关处理
定义变量,但暂时不需要变量有具体的值,可以用None来代替,例如:name=None
函数说明文档
多行注释
def func(x,y)
"""
函数说明
:param x :形参x说明
:param y :形参y说明
:return :返回值的说明
"""
函数体
return 返回值
通过多行注释的形式,对函数进行说明解释,内容写在函数体之前,帮助更好理解函数的功能
函数的嵌套调用:一个函数里面又调用了另外一个函数
def func_b():
print('--2--')
def func_a():
print('--1--')
func_b()
print('--3--')
调用函数func_a()
func_a()
执行结果:
--1--
--2--
--3--
执行流程:函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余部分
变量的作用域:变量的作用范围(变量在哪里可用,在哪里不可用)
局部变量:定义在函数体内部的变量,及只在函数体内部生效
def testA():
num=100
print(num)
testA() # 100
print(num)# 报错:name 'num' is not defined
局部变量的作用:在函数体内部,临时保持数据,当函数调用完成之后,立刻销毁了局部变量,出了函数体,局部变量无法使用
全局变量:指在函数体内,外都能生效的变量
定义全局变量a,将其定义在函数外部
num=100
def testA():
print(num)
def testB():
print(num)
testA()# 100
testB()# 100
global 关键字
num=100
def testA():
print(num)
def testB():
global关键字声明a是全局变量
global num # 设置内部定义变量为全局变量
num=200
print(num)
testA() # 100
testB() # 200
print(num) # 结果全局变量num= 200
全局变量和局部变量 没有任何关系 互不干扰 即使变量名相同
函数进阶
函数多返回值:程序
def test_return():
return 1,2
x,y=test_return()
print(x) # 结果1
print(y) # 结果2
按照返回值的顺序,写对应顺序的多个变量接收即可,变量之间用逗号隔开,支持不同类型的数据return
函数多种传参方式:
位置参数:调用函数时根据函数定义的参数位置来传递参数
def user_info(name,age,gender):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_inf0('Tom',20,'男') #注意传递的参数和定义参数的顺序及个数必须一致
关键字参数:函数调用时通过“键=值”形式传递参数,作用:可以让函数更加清晰,容易使用,同时也清除了参数的顺序需求
def user_info(name,age,gender):
print(f"您的名字是{name},年龄是{age},性别是:{gender}")
关键字传参
user_info(name='小明',age=20,gender='男')
可以不按固定顺序
user_info(age=20,name='小明',gender='男')
可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info('小明',age=20,gender='男')
注意:函数调用时,如果有位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
缺省参数:也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数值(所有位置参数必须出现在默认参数前,包括函数定义和调用)
作用:当调用函数时没有传递参数,就会默认是用缺省参数对应的值
def user_info(name,age,gender='男'):
print(f"您的名字是{name},年龄是{age},性别是:{gender}")
user_info('Tom',20)
user_info('rose',18,'女')
注意:函数调用时,如果为缺省函数传值则修改默认参数值,否则使用这个默认值
不定长参数:也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
作用:当调用函数时不确定参数个数时,可以使用不定长参数
不定长参数类型:位置传递,关键字传递
位置传递:
def user_info(*arge):
print(arge)
user_info("TOM") # Tom
user_info("Tom",18) # Tom 18
注意:传进的所有参数都会被args变量搜集,它会根据传进参量的位置合并为一个元组(tuple),args就是元组类型,这就是位置传递
关键字传递:
def user_info(**kwargs):
print(kwargs)
user_info(name='Tom',age=18,id=110) # {'name:'Tom','age':18,'id':110}
注意:参数是“键=值”形式的形式的情况下,所有的“键=值”都会被kwargs接受,同时会根据“键=值”组成字典
匿名函数:
函数作为参数传递:
def test_func(compute):
result=compute(1,2) #代码逻辑的传入
print(result)
def compute(x,y)
return x+y # 数据的传入
test_func(compute) # 结果3 函数compute,作为参数,传入test_func函数中使用
lambda匿名函数:
def关键字,可以定义带有名称的函数,有名称的函数,可以基于名称重复使用
lambda关键字,可以定义匿名函数(无名称),只可临时使用一次
匿名函数定义语法:
lambda 传入参数:函数体(一行代码)
程序:def test_func(compute)
result=compute(1,2)
print(result)
test_func(lambda x,y:x+y) # 结果3
注意事项:
匿名函数用于临时构建一个函数,只用一次的场景
匿名函数定义中,函数体只能写一行代码,如果函数体要写多行代码,不可用lambda匿名函数,应使用def定义带名函数。

浙公网安备 33010602011771号