万能的函数(三)

本文深入探讨了Python中的高阶函数概念,包括闭包和装饰器的使用,解释了如何利用装饰器在不修改原函数的情况下进行功能扩展,提高了代码的可维护性和灵活性。

1.高阶函数

  • 所谓高阶函数就是使用一个或多个函数作为参数,或者是将函数作为返回值返回
    在这里插入图片描述
    在这里插入图片描述

  • map 是一个在 Python 里非常有用的高阶函数,它接受一个函数和一个序列(迭代器)作为输入然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果
    在这里插入图片描述
    在这里插入图片描述

2.闭包

  • 将函数作为返回值也是高阶函数,也称之为闭包
  • 闭包的好处
    • 创建只有当前函数可以访问的变量
    • 可以将一些私有数据隐藏到闭包中
  • 形成闭包的条件
    • 函数嵌套
    • 将内部函数作为返回值返回
    • 内部函数必须使用外部函数的变量
      在这里插入图片描述

3.装饰器的引入

  • 可以直接通过修改函数中的代码来完成需求,但是会产生以下的问题:

    • 如果修改的函数多,这样的操作会非常麻烦
    • 不便于后期维护
    • 会违反开闭原则(OCP)
      • 程序的设计,要求开发对程序的扩展,关闭对程序的修改
  • 在之前的文章中看到过这样描述装饰器的话,很形象。

    • 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办? 我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了。于是聪明的人们发明长裤,在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后宝宝再也不冷了。装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效。

4.装饰器的使用

  • 通过装饰器,可以在不修改原函数的情况下对函数进行扩展
  • 在开发中,可以通过装饰器来对函数进行扩展

先来个简单的装饰器
在这里插入图片描述
在这里插入图片描述

上面的例子传入的是无参数的函数。如果我们想要传入带参数的函数怎么办?
def add(a ,b):

     return a + b
    # print(a + b)

def fn():
    print('Hello World')

def demo():

    def new_func():
        print('函数开始执行')

        s = add(1, 20)


        print('函数执行结束')
        return s
    
    return new_func()
r = demo()
print(r)



虽然传入了参数,但是函数还是自己手写的,这样很麻烦,有什么解决方法么?

def add(a ,b):

     return a + b
    # print(a + b)

def fn():
    print('Hello World')
# 创立一个参数来接收想要传入的函数
def demo(old):

    def new_func():
        print('函数开始执行')

        s = old(1, 2)


        print('函数执行结束')
        return s

    return new_func()
r = demo(add)

这样依旧不太完美,add()函数需要参数,而fn()函数不需要参数,有需要对old进行修改,有什么好的解决方法么

def add(a ,b):

     return a + b
    # print(a + b)

def fn():
    print('Hello World')
# 创立一个参数来接收想要传入的函数
def demo(old):

    def new_func(*args, **kwargs):
        print('函数开始执行')

        s = old(*args, **kwargs)


        print('函数执行结束')
        return s

    return new_func
r = demo(add)
f = r(555,666)
print(f)




在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值