美文网首页
Python之函数三

Python之函数三

作者: 止于枯骨1 | 来源:发表于2020-09-10 16:39 被阅读0次

    1.高阶函数

    1.1高阶函数简介和特点

    • 接受函数作为参数,或者将函数作为返回值的函数就是高阶函数(当我们使用一个函数作为参数的时候,实际上是将指定的代码传递到了目标函数)
    • 高阶函数有2个特点,符合任意一个特点,这个函数就是高阶函数
      1.接受一个或多个函数作为参数
      2.将函数作为返回值返回
    # 可以指定一个列表中的所有的偶数,保存到一个新的列表
    lst = [1,2,3,4,5,6,7,8,9,10]
    def fn1(i):
        if i % 2== 0:
            return True
        return False
    
    def fn(func,l):
        new_lst=[]
        for n in l:
          # 判断n的奇偶
            if funca(n):
                new_lst.append(n)
        return new_lst
    print(fn(fn1,lst)) 
    输出结果:
    [2, 4, 6, 8, 10]
    
    

    1.2匿名函数

    • 匿名函数 lambda表达式
    • lambda函数表达式是专门用来创建一些简单的函数,它也是函数的另一种创建方式
    • 语法:
      labdma 参数列表 : 返回值
      注意:
      匿名函数最大好处是:它只会用一次,用完就会从内存消失
    # filter() 就是一个高阶函数 它需要将别的函数作为参数来传递
    # 可以将我们的可迭代对象进行一个过滤
    # 返回值    可迭代的对象
    lst = [1,2,3,4,5,6,7,8,9,10]
    def fn4(i):
        if i % 3 == 0:
            return True
        return False
    # filter(fn4,lst) 等价于 filter(lambda i : i % 3 == 0,lst)
    print(filter(fn4,lst))
    r = filter(lambda i : i % 3 != 0,lst)
    print(r)
    print(list(r))
    输出结果:
    <filter object at 0x7fe245a15430>
    <filter object at 0x7fe2459a0370>
    [3, 6, 9]
    ********************************************
    # 将匿名函数赋值个一个变量
    fn6 = (lambda a,b : a + b)(10,50)
    print(fn6)
    fn8=(lambda i : i % 3 == 0)(4)
    print(fn8)
    输出结果:
    60
    False
    

    2.闭包

    • 将函数作为返回值也是高阶函数我们也称为闭包
    • 闭包的好处
      1.通过闭包可以创建一些只有当前函数能访问的变量
      2.可以将一些私有数据藏到闭包中
    • 形成闭包的条件
      1.函数嵌套
      2.将内部函数作为返回值返回
      3.内部函数必须要使用到外部函数的变量
    def make_average():
        nums = []
        def fn1(n):
            nums.append(n)
            return sum(nums)/len(nums)
        return fn1
    mff= make_average()
    print(mff(10))
    print(mff(20))
    输出结果:
    10.0
    15.0
    
    

    3.装饰器的引入

    • 我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题
      1.如果修改的函数多,修改起来会比较麻烦
      2.不方便后期的维护
      3.这样做会违反开闭原则.(OCP原则)
           程序的设计,要求开发过程的扩展,要关闭对程序的修改
    #我希望扩展add函数的,但是要求不能修改原函数的情况下对它进行扩展
    def add(a,b):
         r = a + b
        return r
    def new_add():
        print('函数开始执行')
        r= add(1,2)
        print('函数执行结束')
        return r
    s = new_add()
    print(s)
    输出结果:
    函数开始执行
    函数执行结束
    3
    

    4.装饰器的使用

    • 通过装饰器,可以在不修改原来函数的情况下对函数进行扩展
    • 在开发中,我们都是通过装饰器来扩展函数的功能的
    #定义一个函数,就是对其他函数进行扩展,扩展功能:一个是打印函数开始执行;一个打印函数执行结束
    
    def stard_add(old):
        def neww_function(*args,**kwargs):
            print('函数开始执行')
            r= old(*args,**kwargs)
            print('函数执行结束')
            return  r
        return  neww_function
    
    #像类似于stard_add(old)这种函数我们就称之为装饰器
    @stard_add  
    def spe():
        print('方法')
    spe()
    
    @stard_add  
    def add(a,b):
        print( a+b)
    add(2,4)
    输出结果:
    函数开始执行
    方法
    函数执行结束
    
    函数开始执行
    6
    函数执行结束
    
    

    相关文章

      网友评论

          本文标题:Python之函数三

          本文链接:https://www.haomeiwen.com/subject/slxjektx.html