zoukankan      html  css  js  c++  java
  • 装饰器

    装饰器

    开放关闭原则

    1. 代码扩展进行开放
    2. 修改源代码是封闭
    3. 在不修改源代码以及调用方式,对功能额外添加的就是开放封闭原则

    不用装饰器会代码冗余

    # import time
    # def cen1():
    #     time.sleep(2)
    #     print("你好1")
    # def cen2():
    #     print("你好2")
    # def cen3():
    #     print("你好3")
    # time_start=time.time()
    # cen1()
    # print(time.time()-time_start)
    #
    # time_start=time.time()
    # cen2()
    # print(time.time()-time_start)
    

    不太完美的装饰器

    # import time
    # def cen1():
    #     time.sleep(2)
    #     print("你好1")
    # def cen2():
    #     print("你好2")
    # def cen3():
    #     print("你好3")
    #
    # def func():
    #     def foo(f):
    #         time_start=time.time()
    #         f()
    #         print(time.time()-time_start)
    #     return foo
    # f=cen1
    # cen1=func()
    # cen1(f)
    

    第一版装饰器

    # import time
    # def cen1():
    #     time.sleep(2)
    #     print("你好1")
    # def cen2():
    #     print("你好2")
    # def cen3():
    #     print("你好3")
    #
    # def func(f):
    #     def foo():
    #         time_start=time.time()
    #         f()
    #         print(time.time()-time_start)
    #     return foo
    # cen1=func(cen1)
    # cen1()
    
    

    语法糖

    # import time
    # def func(f):
    #     def foo():
    #         time_start=time.time()
    #         f()
    #         print(time.time()-time_start)
    #     return foo
    # @func#省略了把被修饰函数的地址传递给修饰器和将修饰器内的函数地址返回给被修饰的函数的名
    # def cen1():
    #     time.sleep(2)
    #     print("你好1")
    # cen1()
    

    这是完美的

    # def func(f):
    #     def foo(*args,**kwargs):
    #         print("修饰前的函数")
    #         ret=f(*args,**kwargs)
    #         print("修饰后的函数")
    #         return ret
    #     return foo
    # @func
    # def cen(*args,**kwargs):
    #     print(f"被修饰的函数{args,kwargs}")
    #     return "我是cen函数"
    # print(cen(1,2,3,a=1))
    

    这是终结规则

    # 1.装饰器
    
    # 开发封闭原则:
    # 1.对扩展开放
    # 2.对修改源代码及调用方式封闭
    
    # 装饰器:不修改源代码及原调用方式的前提下,额外增加新功能
    
    # 语法糖:写在被装饰的函数正上方
    
    # def warpper(f):
    #     def inner(*args,**kwargs):
    #         print("被装饰函数执行前")
    #         ret = f(*args,**kwargs)
    #         print("被装饰函数执行后")
    #         return ret
    #     return inner
    #
    # @warpper
    # def func(*args,**kwargs):
    #     print(f"被装饰的{args,kwargs}")
    #     return "我是func函数"
    # print(func(1,2,3,4,5,6,7,8,a=1))
    
    
    # def warpper(f):
    #     def inner(*args,**kwargs):
    #         f(*args,**kwargs)
    #     return inner
    #
    # @warpper
    # def func():
    #     print(111)
    
    
  • 相关阅读:
    struts2在result中使用el表达式碰到的问题
    JSP学习笔记—— jsp中include文件指令乱码的三种解决方案
    SSH整合,applicationContext.xml中配置hibernate映射文件问题
    struts上传文件失败 ContentType not allowed错误解决方法【转】
    mysql5 乱码问题解决方案
    java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决
    JQuery使用on绑定动态生成元素时碰到的问题
    Oracle异常处理
    C#窗口拦截键盘事件
    Oracle中动态SQL详解
  • 原文地址:https://www.cnblogs.com/python25/p/11402561.html
Copyright © 2011-2022 走看看