学习

python装饰器的实现

2018-05-06  本文已影响1人  TimeSHU

装饰器对函数进行修饰,添加一些功能

装饰器也是一个函数

但是需要满足一些特定需求才是一个真正的装饰器

1.不修改被装饰函数的源代码

2.不修改被装饰函数的调用方式装饰器=高阶函数+函数嵌套+闭包

满足以上所有条件,才是一个真正的装饰器

下述代码就是一个装饰器,给ti函数加上运行时间,并且没有修改ti函数的源代码,也没有修改ti函数的调用方式

import time

def  text():

    def  text1(func):

        start_time = time.time()#函数开始运行的时间

        func()#调用的就是ti函数

        stop_time = time.time()#函数结束时间

        print('函数的运行时间是%s' %(stop_time-start_time))

    return text1

@text    #此方法调用text装饰器

def  ti():

    time.sleep(3)#让程序延迟3秒执行

    print('函数运行完毕')

ti()#调用函数

@text  等同于 ti = text(ti) 如果不使用@text则需要用 ti = text(ti),这样每次调用装饰器都需要给ti函数重新赋值,过于麻烦,也不符合上述的不改变函数的调用方式,且只要在需要用到装饰器的时候值需要@text就可以解决

上一篇下一篇

猜你喜欢

热点阅读