递归函数

Day18 递归函数与匿名函数

如何使用函数的递归特性?什么是匿名函数?匿名函数的定义、匿名函数的调用、匿名函数的使用场景

08-09侠课岛    基础入门       

后端/后端/Python 由浅入深入门 10     0     265

总结

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 ) ) )

本教程图文或视频等内容版权归侠课岛所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发布或发表。

评价

10

本课评分:
  •     非常好
难易程度:
  •     适中的

内容目录



|
教程
粉丝
主页

签到有礼

已签到2天,连续签到7天即可领取7天全站VIP

  • 1
    +2 金币
  • 2
    +3 金币
  • 3
    +5 金币
  • 6
    +7 金币
  • 5
    +6 金币
  • 4
    暖心福利
    自选分类VIP ×1天
  • 7
    惊喜大礼

    自选分类VIP ×3天 +20金币
  • 持续签到 +8 金币

金币可以用来做什么?