函数: 什么是函数: 函数就是执行特定任务以完成特定功能的一段代码 为什么需要函数: 复用代码 隐藏实现细节 提高可维护性 提高可读性 便于调试 函数的创建 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)