什么是函数
函数就是执行特定任务以完成特定功能的一段代码
函数的作用
1.复用代码
2.隐藏实现细节
3.提高可维护性
4.提高可读性便于调试
函数的创建
def 函数名(输入参数):
函数体
[return xxx]
print('------函数的创建-----') def add(a,b): #实现加法 return a+b def div(a,b): #实现除法 return a/b print(add(10,20)) print(div(10,4))
函数的参数传递
1.位置实参
根据形参对应的位置进行实参传递
2.关键字实参
根据形参名称进行实参传递
print('-----函数参数的传递----') def sub(a,b): c = a - b return c #实现减法 def mul(a,b): return a * b #实现乘法 print(sub(10,20)) #位置实参,即10传给a,20穿给b print(mul(b=10,a=20)) #关键字实参,按照输入的参数进行传递
函数的返回值
函数返回多个值时,结果为元组
print('----函数的返回值----') def fun(num): #分出列表中的奇数偶数 odd=[] even=[] for i in num: if i%2: odd.append(i) else: even.append(i) return odd,even lst = [11,22,48,13,37,19] print(fun(lst))
函数的参数定义
1.函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递参数
print('-----函数的参数-----') #默认参数值 def add(a,b=50): #默认b为50 print(a,b) add(100) #传给一个参数,给a add(200,100) #100与50不同,赋值给b
2.个数可变的位置参数
定义函数时,可能无法率先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参(像c中的指针)
结果为一个元组
3.个数可变的关键字形参
定义函数时,可能无法率先确定传递的关键字实参的个数时,使用可变的关键字参数
使用**定义个数可变的位置形参
结果为一个字典
print('----个数可变的位置形参----') def fun(*args): #只能有一个 个数可变的位置形参 print(args) fun(10) fun(20,30,40) print('----个数可变的关键字形参-----') def fun(**args): #同样只能有一个 个数可变的关键字形参 print(args) fun(a = 10) fun(b = 20, c = 30, d = 40)
变量的作用域
程序代码能访问该变量的区域
根据变量的有效范围分:
局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量会成为全局变量
全局变量:函数体外定义的变量,可作用于函数内外
print('---变量的作用域-----') k = 30 #函数外定义,为全局变量 def fun(): a = 10 #函数内定义,局部变量 global b b = 20 #函数内定义,但用global声明,为全局变量 print(a) print(b) print(k) fun() #print(a) print(b) print(k)
递归函数
1.什么是递归函数
如果一个函数的函数体内调用了函数本身,这个函数就称为递归函数
2.递归的组成部分
递归调用和递归终止条件
3.递归的调用过程
每递归调用一次函数,都会在栈内存分配一个和栈帧
每执行完一次函数,就会释放相应的空间
4.递归的优缺点
优点:思路和代码简单
缺点:占用内存多,效率低下
print('----递归函数----') #n的阶乘 def fac(n): if n==1: return 1; else: return fac(n-1)*n print(fac(4))
斐波那契数列
print('----斐波那契数列----') def fib(n): if n==1: return 1 elif n==2: return 1 else: return fib(n-1)+fib(n-2) print(fib(6))