首页 > 其他分享 >装饰器入门(总结) -4

装饰器入门(总结) -4

时间:2024-10-27 15:47:51浏览次数:3  
标签:总结 return 函数 timer inner foo 装饰 入门


'''
装饰器作用:<用来装饰其他函数的,即为其他函数添加特定功能的函数>

装饰器函数的两个基本原则:
1.装饰器不能修改被装饰函数的源码
2.装饰器不能修改被装饰困数的调用方式
关于第二点的说明:
@timer 等效于foo=timer(foo),事实上返回的是嵌套函数的view(引用):timer_calc
但接受的名称记为foo,就是符合第二点,不能改变被装饰函数的调用方式

3.如果不用语法糖@timer,调用方式如下:
foo=timer(foo) --> @timer
foo()
'''

'''
装饰器基本步骤:
1.定义一个接受函数名作为参数的高阶函数
2.在高阶函数中定义一个嵌套函数,在该嵌套函数中封装想要添加的功能代码
3.调用作为参数传入的函数名
4.返回嵌套函数的函数名
'''


# (1)被装饰函数带有参数或不带参数
def deco(func):
    def inner(*args,**kwargs):
        # 包含所有的附加功能
        func(*args,**kwargs)
    return inner
'''
eg.
0. 装饰器就是在运行被装饰函数的基础添加<特定的功能>
1. foo("MMiL",18) -> 等效于调用嵌套函数timer_calc("MMiL",18) <- foo=timeer(foo)
    在嵌套函数里面调用被装饰的函数func(name,age)
2. 为了增加通用性,不同的被装饰函数输入参数都不一样,考虑到自适应性
    装饰器嵌套函数应该*args,**kwargs
'''

# (2)装饰器本身带参数
def deco(param): # param是装饰器本身的参数
    def outer(func): # 是已被装饰的函数名作为参数 -> 语法糖
        def inner(*args,**kwargs):
            # 包含所有的附加功能
            func(*args,**kwargs)
        return inner
    return outer
'''
eg.
1. @timer(timer_type="timer_by_minute") 等效于:foo=timer(timer_type="timer_by_minute")(foo);
   链式传参; timer(timer_type="timer_by_minute")返回的是outer函数引用,在传入outer(foo)-->返回嵌套函数inner引用-->foo
2. 深刻理解return outer,return inner, 返回嵌套函数引用 & 嵌套函数里面的链式调用
'''

# (3)被装饰函数带返回值
def deco(param): # param是装饰器本身的参数
    def outer(func): # 是已被装饰的函数名作为参数 -> 语法糖
        def inner(*args,**kwargs):
            # 包含所有的附加功能
            result=func(*args,**kwargs) # 接收到被修饰函数的返回值
            return result # 返回被修饰函数的返回值
        return inner
    return outer

标签:总结,return,函数,timer,inner,foo,装饰,入门
From: https://blog.csdn.net/iLfree/article/details/143268028

相关文章

  • 2024-2025-120241425《计算机基础与程序设计》第五周学习总结
    2024-2025-120241425《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13268这个作业的目标Pep/9虚拟机机器语言与汇编......
  • CSP-S总结
    T1服了啊,看错题了,以为只能按i从小到大的顺序攻击,然后想了半个多小时,一看样例,直接傻眼,气笑了。T2先想a>0时,将p排序,能检测出它超速的是\(p_i\)~\(p_n\)的检测仪,所以只要有超速的设置\(p_n\)一个就够了,a=0,也是最多设置一个,然后就一直在想a<0的情况,知道每辆车能被检测的是一个连续......
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇你就是网络安全高手了。
       关于我我算是“入行”不久的一个新人安全工作者,为什么是引号呢,因为我是个“半个野路子”出身。早在13年的时候,我在初中时期就已经在90sec、wooyun等社区一直学习、报告漏洞。后来由于升学的压力,我逐渐淡出了安全圈子,也没有继续学习技术。也因为这个原因,高考选择专业时......
  • 2024-2025-1 20241415 《计算机基础与程序设计》第五周学习总结
    2024-2025-120241415《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机、机器语言与汇编语言、算法与伪代码、测试:......
  • 2024-2025-1 20241413 《计算机基础与程序设计》第五周学习总结
    班级链接https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求https://msg.cnblogs.com/item/4274387作业目标Pep/9虚拟机机器语言与汇编语言算法与伪代码测试:黑盒,白盒--------教材学习内容总结《计算机科学概论》第六章计算机硬件组成:中......
  • 2024-2025-1 20241314 《计算机基础与程序设计》第五周学习总结
    2024-2025-120241314《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机机器语言与汇编语言算法与伪代码测试......
  • 2024-2025-1 20241417 《计算机基础与程序设计》第五周学习总结
    这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第五周作业)这个作业的目标<Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白盒>作业正文https://www.cnblogs......
  • 2024-2025-1 20241320 《计算机基础与程序设计》第5周学习总结
    2024-2025-120241320《计算机基础与程序设计》第5周学习总结作业信息|这个作业属于哪个课程|https://www.cnblogs.com/rocedu/p/9577842.html|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05|这个作业的目标|Pep/9虚拟机•机器语言与汇编语......
  • 【JAVA SE】SE总结
    目录数据类型与变量Java获取输入随机数方法重载 数组定义 获取长度遍历数组工具类Arrays  将数组转成字符串将数组排序拷贝数组类和对象抽象类接口语法规则ComparableComparator比较器Object类 对象比较方法内部类实例内部类静态内部类 String类......
  • 2024-2025-1 20241316 《计算机基础与程序设计》第五周学习总结
    2024-2025-120241316《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白......