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

    一,装饰器定义:本质就是函数,功能是为其他函数添加新功能
    原则:
    1.不修改被装饰函数的源代码(开放封闭原则)
    2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式
    3.装饰器=高阶函数+函数嵌套+闭包
    高阶函数定义:
    1.函数接收的参数是一个函数名
    2.函数的返回值是一个函数名
    3.满足上述条件任意一个,都可称之为高阶函数
    闭包:在一个作用域里放入定义变量,相当于打了一个包
     #这就是一个实现一个装饰器最基本的架子 
    def timer(func):         #函数接收的参数是一个函数名
         def frame(): 
               func() 
         return frame        #函数的返回值是一个函数名
    import time                           #时间模块计算func()运行的时间
    def timer(func):
        def frame(*args,**kwargs):#添加参数*args,**kwargs
              start_time=time.time()
              func(*args,**kwargs)
              stop_time=time.time()
              #添加简单功能
              print('func函数[%s],运行时间是[%s]' %(func,stop_time-start_time)
            return frame
    
    
                

    给timer()添加一个return

    import time
    def timer(func):
        def frame(*args,**kwargs):
            start_time=time.time()
            res=func(*args,**kwargs)
            stop_time=time.time()
            print('func函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
            return res
        return frame    #给timer()添加的return来触发frame()来run

    编写一个函数来使用我们的装饰器

    @timer()#@timer就等同于run_def=timer(cal)
    def run_def(simple):
          print('This is a simple function')
          res=0
          for i in simple:
               res+=1
          return res
    run_def(range(9))

    #在使用pycharm的时候,在看不懂运行逻辑的时候,建议使用debug

    既能朝九晚五,又能浪迹天涯
  • 相关阅读:
    RTTI机制
    constexpr
    map/unordered_map
    Centos 安装Oracle
    JS带进度 文件 重复 自动 异步上传
    xadmin 小组件默认折叠
    xadmin datetime 类型报错 unsupported format characte
    Vmware 链接克隆 转 完整克隆 Converting a linked clone virtual machine to a full clone virtual machine
    vsftpd 530 500 553
    百度自然语言处理API调用
  • 原文地址:https://www.cnblogs.com/jackerzhou/p/8714713.html
Copyright © 2011-2022 走看看