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

你可能感兴趣的:(python基础,函数基础,python,lambda,filter)