python之路之装饰器

一 装饰器进化之路
1)
import time

def index():
     start_time=time.time()
     time.sleep(2)
     print('welcome to index world')
     end_time=time.time()
     print('%s'%(end_time-start_time))
index()
那么这个函数我们虽然实现了他的功能,但是修改了源代码,所以这种扩展新功能是不可用的。
2)
def index():
    time.sleep(1)
    print('welcome to index world')

start_time=time.time()
index()
end_time=time.time()
print(end_time-start_time)

那么我们可以看出这两种运行结果是一样的,第二种既没有改变源代码,也没有改变调用方式。可是每次使用都要重新复制一次代码,造成代码重复过多。

3)
def index():
    time.sleep(1)
    print('welcome to index world')

def outter():
    start_time=time.time()
    index()
    end_time=time.time()
    print(end_time-start_time)
f=outter()#我们通过调用outter函数就会运行
print(f)#将outter的返回值输出,那么outter没有返回值,所以输出为none
同样的改变了调用方式。
4)
def index():
    time.sleep(1)
    print('welcome to index world')

def outter(func):
    def inner():
        star_time=time.time()
        func()
        end_time=time.time()
        print(end_time-star_time)
    return inner
index=outter(index)
index()
#首先这段代码的运行是:先定义一个index()然后到outter(),然后到最后的outter调用,调用之后开始运行outter里面的程序,运行到第一行
# 返回inner,然后调用index函数,运行index函数。
所以在这里outter就是我们所说的装饰器

5)装饰器模版
def outter(func):
    def inner(*args,**kwargs):
        res=func(*args,**kwargs)
        return res
    return inner
6)运行时间装饰器模版
def timmer(func):
def inner(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
end_time = time.time()
return res
return inner
index=timmer(index)
index()

7)验证登陆装饰器模版:


原文地址:https://www.cnblogs.com/zhangsanfeng/p/8672838.html