什么是函数?
函数:函数就是执行特定任务和以完成特定功能的一段代码
为什么需要函数?
- 复用代码
- 隐藏实现细节
- 提高可维护性
- 提高可阅读性便于调试
1、函数的创建和调用
函数的创建
def 函数名(输入参数): 函数体 return xxx # 例 def calc(a,b) c = a + b return c
函数的调用
函数名(实际参数)
# 例 result = calc(10,20) print(result)
2、函数的参数传递
形参的位置是在函数的定义出,实参是在函数的调用处
- 位置传参:根据形参对应的位置进行实参传递
- 关键字传参:根据形参的名称进行实参传递
#位置传参
calc(10,20)
#关键值传参
calc(b=10,a-20)
总结:
在函数调用过程中,进行参数传递时,如果是不可变对象,在函数体的修改不会影响实参值,如果是可变对象,在函数体的修改会影响到实参的值
3、函数的返回值
- 函数返回多个值的时候,结果为元组
- 函数返回值如果是1个,直接返回原类型
- 函数如果没有返回值,return可以省略
4、函数的参数定义
函数定义默认参数值
- 函数定义时,给形参设置默认值,只有与默认值不符时,才需要传递实参
def fun(a,b=10): #b称为默认值参数 print(a,b) #调用函数 fun(100) #只传递一个参数,b采用默认值 fun(20,30) #30替换默认值10
个数可变的位置参数
- 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
- 使用*号定义个数可变的位置参数
- 结果为一个元组
#可变长参数 def fun(*arg): print(args) fun(10) fun(10,20) fun(10,20,30)
个数可变的关键字形参
- 定义函数时,无法事先确定传递关键字参数的个数时,使用可变的关键字形参
- 使用**定义个数可变的关键字形参
- 结果为一个字典
def fun(**args)
print(args)
fun1(a=10)
fun2(a=1,b=2,c=3)
注意:个数可变的位置参数和个数可变的关键字参数,都最多只能有一个,当两个同时存在时,个数可变的位置参数必须在关键字参数前
函数参数的总结
将列表当作实参传递前面加*
将字典当作实参传递前面加*
在形参列表中途加入代表后面的参数传递必须是关键字传参
5、变量的作用域
- 程序代码能访问该变量的区域
- 根据变量的有效范围可以分为全局变量和局部变量
全局变量:函数体外定义的变量,可作用于函数体内
局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明这个变量就会变成全局变量global 变量名
6、递归函数
什么是递归函数
- 如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数
递归的组成部分
- 递归调用与递归终止条件
递归的调用过程
- 每递归调用一次,都会在栈内分配一个栈帧
- 每执行一次函数,都会释放相应的空间
递归的优缺点
- 缺点:占用内存多,效率低下
- 优点:思路和代码简单
7、总结