总结
1.什么是递归函数
- 调用自己本身的函数叫递归函数;
2.斐波那契数列
- 前两项都是1,第三项开始,每一项都是前两项之和;
3.递归函数的特性
-
递归一定需要有结束条件;
-
每次进入更深一层递归时,问题规模比上一次递归都应有所减少;
-
通常前一次递归的输出就作为后一次递归的输入;
-
递归效率不高,递归层次过多会导致栈溢出;
4.匿名函数
-
没有名字的函数就是匿名函数,并且因为匿名函数没有名字,所以不必担心函数名冲突;
-
在Python中,借助lambda表达式构建匿名函数,关键字lambda表示匿名函数,冒号前面的变量名表示函数参数;
-
匿名函数可以实现自调用(也就是自己调用自己);
-
如何简化匿名函数的代码;
5.高阶函数
-
高阶函数就是把函数当成参数传递的一种函数;
-
现在的课程还没有讲到,以后的课程会系统讲解;
-
需要特别注意一下匿名函数在高阶函数map( )函数中的使用场景;
课后补充
匿名函数的深入理解:
-
没有名字,不需要使用关键字def定义的函数就是匿名函数;
-
不用写return,执行表达式运行后就能得到结果;
-
使用lambda关键字声明,语法:
lambda 参数:方法表达式
(或者三元运算符,是if else控制流的简便形式,python三元运算符语法:变量1或表达式1 if 条件 else 变量2或者表达式2
,也就是条件成立,那么数据返回变量1或者表达式1的计算值,否则返回变量2或者表达式2的计算值) -
匿名函数适用于简单的逻辑以及一次性临时的在某个地方使用、不需要在其他代码中重复使用的代码表达式,一般就是一行连续代码搞定(较为复杂、需要较多重复调用的,请使用def显式定义函数来调用);
-
一般使用一个变量等于这个匿名函数(也就是匿名函数赋值给变量),然后使用变量去调用这个匿名函数,也可以直接进行自调用,使用()括住匿名函数,然后外面加一个括号传参数执行即可;
下面举例研究:
# 使用变量存储匿名函数,可以方便调用,lambda声明,a为参数,后为简单的运算表达式
fun1 = lambda a: a % 2 + 1
print(fun1(5)) #输出:2
# 自调用式:语法:(lambda 参数: 表达式)(传入的参数值),如下有两个参数的自调用做法,参数是从左到右一一对应:
print( (lambda a, b: a % 2 + b)(2, 5) ) #输出:5
# 三元表达式
fun2 = lambda a: '被整除' if ((a % 2) == 0) else '没有被整除'
print(fun2(1)) #输出:没有被整除
# 定义个函数
def fun3(sex):
if sex == 1 :
print('执行男人的程序代码块')
elif sex == 2:
print('执行女人的程序代码块')
else:
print('啥都不干')
# 简单传入数值调用
fun3(2) #输出:执行女人的程序代码块
# 使用匿名函数来进行判断调用,比如:我在数据库中存储的值是代表男人的代码用的是2,女人的是1,因为fun3已经在其他地方使用了,如果这个时候,我修改fun3中的if判断,会影响其他的程序运行,那么这个时候,我可以通过传入一个匿名函数来判断就很方便解决了
# 定义个变量,并把匿名函数赋值给它
lamFun = lambda a: 1 if a == 2 else 2
fun3(lamFun(1))
#自调用形式
fun3((lambda a: 1 if a == 2 else 2)(1))
动手实践
# 请输出去掉“昵称:”这几个字的昵称名,如:火火,需要大家动手查一下map()方法哦
nickNames = ['昵称:夏天的风', '昵称:在海边写代码的猫', '昵称:火火', '昵称:冬曲', '昵称:小玲']
# 参考答案:
print( list( map(lambda name: name.lstrip('昵称:'), nickNames ) ) )