函数:
什么是函数:
函数就是执行特定任务以完成特定功能的一段代码
为什么需要函数:
复用代码
隐藏实现细节
提高可维护性
提高可读性
便于调试
函数的创建
def 函数名([输入参数]):
函数体
[return xxx]
参数传递
位置实参:根据位置进行实参传递
关键字实参:根据形参名称进行实参传递
返回值
1。可以不需要返回值,省略return
2。返回单个类型数据 return 1
3。返回多个数据,则为元组类型 return 1,2,3
参数定义
可以给形参设置默认值
个数可变的位置参数 *args
定义函数时,看你无法确定传递的位置实参的个数时,可以使用位置参数
使用 *定义个数可变的位置形参
结果为一个元组
个数可变的关键字形参 **args
定义函数时,无法确定传递的实参的个数时,使用可变的关键字形参
使用 ** 定义个数可变的关键字形参
结果为一个字典
可变的位置/关键字参数,只能为1个
定义函数时,如果个数可变的关键字形参和位置形参都需要时,位置形参要放到关键字形参前面
def fun(*agrs1, **args2):
pass
函数的调用
def fun(a,b,c):
pass
1。调用函数传入实参
fun(10,20,30)
2。将列表中的元素都转换为位置实参传入 使用 *
list1 = [11,22,33]
fun(*list1)
3。关键字实参传入
fun(a=100,b=200,c=300)
4。将字典的键值对转换为关键字实参 使用 **
dic1 = {'a':111,'b':222,'c':333}
fun(**dic1)
5。必须要使用关键字参数传递
def fun(a,b,*,c,d) # *之后的参数,在函数调用时,只能采用关键字参数传递
变量作用域
全局变量:在函数内部和外部都可以使用
局部变量:在函数内定义都变量可以在函数内使用
在函数内定义全局变量时,需使用关键词 global
递归函数
在一个函数都函数体内调用该函数本身
递归函数必须存在调用与终止条件
每递归调用一次函数,都会在栈内存分配一个栈帧
每执行完一次函数,都会释放响应都空间
缺点:占用内存多,效率底
优点:思路和代码简单
-
- # 阶乘
- def fac(n):
- if n == 1:
- return 1
- else:
- return n * fac(n - 1)
-
-
- # print(fac(6))
-
- # 斐波那契数列
- def fib(n):
- if n == 1 or n == 2:
- return n
- else:
- return fib(n - 1) + fib(n - 2)
-

