zoukankan      html  css  js  c++  java
  • python之路(7)装饰器

     前言

      装饰器:为函数添加附属功能,本质为函数

      原则:不修改被修饰函数的源代码

          不修改被修饰函数的调用方式

      装饰器=高阶函数+函数嵌套+闭包


    使用场景演示

      定义下面函数

    def cal(l):
        res = 0
        for i in l:
            time.sleep(0.1)
            res+=1return res

      想要实现检测函数的运行时间

    import time
    def cal(l):
        start_time = time.time()
        res = 0
        for i in l:
            time.sleep(0.1)
            res+=1
        stop_time = time.time()
        print("函数的运行时间%s" %(stop_time-start_time))
        return res

      以上函数虽然完美的实现了测量时间,但是违反了开放封闭原则,修改了函数中的代码,我们应该在不改变函数代码的前提下加入检测时间的功能,由此应该引入装饰器的概念

    import time
    def timer(func):
        def wrappper(*args,**kwargs):
            start_time=time.time()
            res=func(*args,**kwargs)  # --> (不修改修饰函数的源代码)
            stop_time=time.time()
            print('函数运行的时间%s' %(stop_time-start_time))
            return res
        return wrappper
    
    注:其上就是装饰器
    
    @timer #做了将cal函数名作为参数传给了timer函数,并返回赋值给cal   cal = timer(cal) --> (不修改修饰函数的调用方式)
    def cal(l):
        res = 0
        for i in l:
            time.sleep(0.1)
            res+=1
        return res
    
    cal(range(10))#这里的cal,调用的其实是装饰器里的wrapper内嵌函数
    

      

  • 相关阅读:
    Feign Ribbon Hystrix 关系剖析
    Activiti 分布式方案实现探讨
    Flink任务架构分析
    Activiti 数据库表梳理
    负载均衡方案优缺点探讨
    公文流转系统
    css美化界面
    动手动脑(二)
    csslayui树练习
    css点名
  • 原文地址:https://www.cnblogs.com/shuzhixia/p/9809100.html
Copyright © 2011-2022 走看看