函数的定义及调用
函数的定义
- 函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用。以此达到一次编写,多次调用的目的
- 使用函数可以实现代码的重用性
- Python中函数定义使用 def 关键字
- 语法结构
函数的调用
- 无返回值方法的调用:
函数名(参数列表)
函数使用的总结
- 函数定义
- 关键字 def
- 确定函数名称、参数名称、参数个数、编写函数体(用于实现函数功能的代码)
- 函数调用
- 通过函数名进行调用函数
- 对函数的各个参数进行实际的赋值
- 函数执行
- 使用实际参数参与函数功能的实现
- 函数返回结果
- 函数执行结束后,如果使用 return 进行返回结果,则结果被返回到函数的调用处
函数的参数传递
形式参数与实际参数
形式参数:函数定义处的参数
实际参数:函数调用处的参数
参数的类型
位置参数
- 调用时的参数个数和顺序必须与定义的参数个数和顺序相同
关键字参数
- 函数调用时,使用 “形参名称=值” 的方式进行传参,传递参数顺序可以与定义时的顺序不同
位置参数在关键字参数之后程序会报错
默认值参数
- 函数定义时,直接形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值
同时存在位置参数和默认值参数时,默认值参数放后【函数定义时】
可变参数
- 个数可变的位置参数
- 在参数前加一个星(*para)
- 函数调用时可接收任意个数的实际参数,并放到一个元组中
- 如果实际参数是列表,想要将各个列表值转入元组,在调用时参数前加一个星,会将列表进行解包
- 个数可变的关键字参数
- 在参数前加两个星(**para)
- 在函数调用时可接收任意多个 “参数=值” 形式的参数,并放到一个字典中
函数的返回值
- 函数的返回值就是函数执行结束之后的结果(可有可无)
- 语法结构:
return value - return 可以出现在函数中的任意一个位置,用于结束程序
- 在函数调用处可以将返回值放到变量中进行存储
- 可返回一个值,或多个值,如果是多个值,结果是一个元组类型
- 如果函数没有使用 return 关键字,那么函数的返回值为 None
变量的作用域
局部变量与全局变量
局部变量
- 函数定义处的参数与函数内部定义的变量
- 仅在函数内部生效
- 函数执行结束,变量的生命周期结束
全局变量
- 函数外定义的变量或函数内部使用 global 关键字修饰的变量
- 整个程序中都有效
- 程序运行结束,变量的生命周期结束
- 当全局变量与局部变量重名时,局部变量优先级高
匿名函数lambda
匿名函数
- 匿名函数是指没有名字的函数
- 该函数只能使用一次
- 使用关键字 lambda 定义
- 语法结构:
result=lambda 参数列表:表达式
函数的递归
什么是递归函数
- 在一个函数的函数体内调用该函数本身,该函数就是递归函数
递归的组成部分
- 递归调用与递归终止条件
递归的调用过程
- 每递归调用一次函数,都会在内存分配一个栈帧
- 每执行完一次函数,都会释放相应的空间
递归的优缺点
- 缺点:占用内存多,效率低下
- 优点:思路和代码简单
使用递归来计算阶乘
斐波那契数列
- 斐波那契数列,又称黄金分割线,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:
1、1、2、3、5、8、13、21、34 - 从第三项开始,每项都等于前两项之和:
f(n)=f(n-1)+f(n-2)