【1.48】装饰器

没有修改被修饰函数的源代码,

也没有修改被修饰函数的调用方式,

但是也没有为被修饰函数添加新功能

 

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,

装饰器的返回值也是一个函数对象。

它经常用于有切面需求的场景,

比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

 

需要使用 

高阶函数

函数嵌套

闭包

 

高阶函数定义:
1.函数接收的参数是一个函数名
2.函数的返回值是一个函数名
3.满足上述条件任意一个,都可称之为高阶函数

 

高阶函数

 

解决函数调用

接收一个函数 为 被装饰函数,返回一个函数为被装饰函数 ,在装饰中又要运行一次被装饰函数

这样就会导致 被装饰函数被运行两次

函数嵌套

就是将多个函数嵌套在一起 解决被装饰函数运行一次

函数闭包

解决函数参数的传递  

 

简单的装饰器,函数执行时间的计算:

import time

time.sleep(0.1)
def timecal(func):
    def warpps(*args,**kwargs): 
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print("函数运行的时间是%s"%(stop_time-start_time))
        return res
    return warpps


@timecal 
def func(x):
    time.sleep(0.3)
    print(x*10)

@timecal
def func1(x,y):
    time.sleep(0.2)
    print(x*y)

@timecal
def fun2(name,age,sex):
    time.sleep(0.4)
    print("name:\t%s\nage:\t%s\nsex:\t%s"%(name,age,sex))



fun2("yaoming",age=18,sex="male")

  

 

posted @ 2016-04-12 18:17  科学小怪癖  阅读(85)  评论(0)    收藏  举报