zoukankan      html  css  js  c++  java
  • 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)验证登陆装饰器模版:


  • 相关阅读:
    RQNOJ 1 明明的随机数
    poj1284
    poj1061
    51nod1305
    51nod 1344
    poj2240
    poj1860
    使用SwitchToThisWindow时不切换问题
    c#拷贝整个文件夹到指定文件夹下(非递归)
    IniHelper
  • 原文地址:https://www.cnblogs.com/zhangsanfeng/p/8672838.html
Copyright © 2011-2022 走看看