zoukankan      html  css  js  c++  java
  • python基础 装饰器

    装饰器

    装饰器的作用:
          不想修改函数的调用方式,但是还想在原来的函数添加功能
          timmer 就是一个装饰器函数,只是对一个函数 有一些装饰作用

    import time    #import  调用模块
    time.sleep(5)    #让程序在执行到这个位置的时候停一会
    print('哈哈哈')
    time.time()  #获取当前时间
    @timmer            #语法糖
    
    def timmer(f):
        start = time.time()
        f()
        end = time.time()
        print(end - start)
    
    def func():
        #start = time.time()
        time.sleep(0.01)
        print('')
        #end = time.time()
        #print(end - start)
    timmer(func)
    
    
    
    def func():
        time.sleep(0.01)
        print()
        
    def timmer(func):
        def inner():
            start = time.time()
            func()
            end  = time.time()
            print(end - start)
        return inner
    func = timmer(func)
    func()
    import time
    def timmer(f):   #装饰器函数
        def inner(a):
            start = time.time()
            ret = f(a)   #被装饰的函数
            end = time.time()
            print(end - start)
            return ret
        return inner
    @timmer     #语法糖
    def func(a):
        time.sleep(0.01)
        print('',a)
        return '新年好'
    #func = timmer(func)
    ret = func(1)
    print(ret)

    开放封闭原则

      1.对扩展是开放的

        为什么要对扩展开放呢?

        我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须允许代码扩展、添加新功能。

      2.对修改是封闭的

        为什么要对修改封闭呢?

        就像我们刚刚提到的,因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户。

    装饰器完美的遵循了这个开放封闭原则。

    装饰器的固定模式

    def outer():
        def inner():
            return 'inner'
        inner()
    outer()
    #装饰器的固定格式——wraps版
    from functools import wraps
    
    def deco(func):
        @wraps(func) #加在最内层函数正上方
        def wrapper(*args,**kwargs):
            return func(*args,**kwargs)
        return wrapper

    装饰带参数函数的装饰器

    def wrapper(f):   #装饰器函数,f是被装饰的函数
        def inner(*args,**kwargs):
            '''在被装饰函数之前要做的事情'''
            ret = f(*args,**kwargs) #被装饰的函数
            '''在被装饰函数之后要做的事情'''
            return ret
        return inner
    @wrapper        #语法糖 @装饰器函数名
    def func(a,b)        #被装饰的函数
        time.sleep(0.01)
        print('sole')
        return'sole'
    def wrapper(f):
        def inner(*args,**kwargs):
            ret = f(*args,**kwargs)
            return ret
        return inner
    
    @wrapper
    def qqxing():
        print(123)
    ret = qqxing()
     
  • 相关阅读:
    【Python-虫师】自动化测试模型--参数化
    【Loadrunner】【浙江移动项目手写代码】代码备份
    虫师的性能测试思想html网页学习
    Loadrunner之https协议录制回放报错如何解决?(九)
    【Python虫师】多窗口定位
    【虫师讲Selenium+Python】第三讲:操作测试对象
    【虫师Python】第二讲:元素定位
    【小甲鱼】【Python】正则表达式(三)
    【小甲鱼】【Python】正则表达式(二)
    js提交数据时需判断是点击事件还是回车键
  • 原文地址:https://www.cnblogs.com/soleZ/p/8135876.html
Copyright © 2011-2022 走看看