装饰器(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

posted @ 2018-04-04 09:00  Lve_s  阅读(275)  评论(0编辑  收藏  举报