2021/3/22第十次python课(函数下)

一、函数递归

  • 递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,在去解决问题
  • 递归式函数有2个条件
     - 1. 递归条件 可以将问题继续分解的条件
     - 2.基线条件 问题可以被分解为最小问题,当满足基线条件时,递归就不执行了
#范例:求n的阶乘
def fun(n):
    if n==1:
        return 1
    else:
        return n*fun(n-1)

print(fun(3))

二、匿名函数

  • 匿名函数:没有名字,使用lambda关键字去创建函数
  • 语法:lambda 参数1[,参数2,参数3]:表达式
  • 特点:匿名函数冒号后面的表达式有且只有一个、匿名函数自带return,而这个return的结果就是表达式计算后的结果
  • 缺点:lambda只能是单个表达式,不是一个代码块,仅仅能封装有限的逻辑
  • 匿名函数作用:
    防止重名
    不用再去定义函数,使用方便
    可以作为传参的工具
范例:
s=lambda x,y:x+y
print(s(10,20))
#30
print((lambda x,y:x+y)(10,20))
#30

'''
filter ()有两个参数,第一个参数或函数是过滤规则,第二个是过滤的数据
返回的是一个容器,直接打印打不出来
'''
list1=[1,2,56,89,44]
s= lambda a: a %2==0
print(list(filter(s,list1)))
#[2, 56, 44]

注:lambda函数自带return

三、高阶函数

  • 接收函数作为参数,或者将函数作为返回值返回的函数就是高阶函数
#第一种高阶函数范例:
#把ff函数对象传给f  ,即f==ff
def fun(f):
    for i in range(10):
        if f(i):
            print(i)
def ff(num):
    if num%2==0:
        return True

fun(ff)

0
2
4
6
8

四、闭包

(保证外部函数的参数或变量中被内部函数引用的不销毁)

  • 将内部函数作为返回值也是高阶函数,我们也称为闭包
  • 好处:
      - 通过闭包可以创建一些只有当前函数能访问的变量
      - 可以将一些私有数据藏到闭包中
  • 形成闭包的条件:
    函数嵌套
    内部函数必须要使用到外部函数的变量
    将内部函数作为返回值返回
    注:nonlocal num1 告诉解释器,这里使用的不是本地的num1,是外部变量的num1
    详见Vamei的博客

附:第十讲作业

猴子吃桃问题(递归):
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?

def fun(day):
    if day==1:
        return 1
    return 2*(fun(day-1)+1)
print(fun(10))

结果

1534
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔记本IT

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值