python装饰器

一:开放封闭原则,对扩展是开放的,对修改是封闭的

二:装饰器,装饰器本质可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象
装饰器的功能是:
在不修改被装饰对象源代码以及调用方式的前提下为其添加新功能

原则:
1.不修改源代码
2.不修改调用方法
目标:添加新功能
装饰器的语法:在被装饰对象的正上方的单独一行。@装饰器名字
import time
import random
#装饰器
def timmer(func):#func=index
    #func=index
    def wrapper():
        start_time=time.time()
        func()#index
        stop_time=time.time()
        print('run time is %s' %(stop_time-start_time))
    return wrapper
#被装饰函数
@timmer              #index=timer(index)
def index():
    time.sleep(random.randrange(1,5))
    print('welecome to index page')

@timmer
def home():
    time.sleep(random.randrange(1, 3))
    print('welecome to HOME page')
# index=timmer(index) #index=wrapper
# index() #wrapper()                        @timmer等于这两步
index()
home()

可以加多个装饰器,计算顺序是自下而上,自上而下运行
装饰器修订版本
import time
import random
#装饰器
def timmer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('run time is %s' %(stop_time-start_time))
        return res
    return wrapper
#被装饰函数
@timmer
def index():
    time.sleep(random.randrange(1,5))
    print('welecome to index page')
res1=index()
print(res1)
原文地址:https://www.cnblogs.com/78pikaqiu/p/7010567.html