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

    装饰器

    装饰器的特点:

      用户感觉不到装饰器的存在

      在一个函数前后唐家功能

      本身的函数不会改变

    开放封闭原则

      开放 对于扩展是开放的

      封闭 对于修改是封闭的

    装饰器的基本结构

    def wrapper(func):
        def inner(*args,**kwargs):
            #被装饰函数执行之前的操作
            ret=fanc(*args,**kwargs)
            #被装饰函数执行之后的操作
            return ret
        return inner
    
    @wrapper
    def f(*argument):
        pass

    例子

    -------------------------------------------------------------------------------------------------------
    # import time
    # def timmer(F):                         #    装饰器
    #     def inner():
    #         start_time=time.time()
    #         F()
    #         end_time=time.time()
    #         print(end_time-start_time)
    #     return inner
    #
    # @timmer                             #   F=timmer(F)         #   语法糖
    # def F():
    #     sum=0
    #     for i in range(1,100000):
    #         sum+=i                         # 被装饰的函数
    # F()                        # 直接调用函数,还可以加上装饰器的功能
    # -------------------------------------------------------------------------------------------------------

    例二

    # def wrapper(func):
    #     def inner(*args):
    #         print('你正在调用%s函数'%(func.__name__))
    #         re=func(*args)
    #         return re
    #     return inner
    #
    # @wrapper
    # def welcome(name):
    #     print('welcome: %s'%name)
    # @wrapper
    # def home():
    #     print('欢迎来到home页!!')
    #
    # home()
    # print('')
    # welcome('alex')
    

      

    带参数的装饰器  ( 批量 使用装饰器)
    # def outter(flag):
    #     def wrapper(func):
    #         def inner(*args,**kwargs):
    #             if flag:
    #                 pass
    #                 # 装饰功能
    #             re=func(*args,**kwargs)
    #             if flag:
    #                 pass
    #                 # 装饰功能
    #
    #             return re
    #         return inner
    #     return wrapper
    
    # @outter(False)
    # def fun1():
    #     print('Apple')
    #
    # fun1()
     
  • 相关阅读:
    3747 [POI2015]Kinoman
    1303 [CQOI2009]中位数图
    3769 [spoj 8549] BST again
    1015 [JSOI2008]星球大战starwar
    1193 [HNOI2006]马步距离
    合并Git仓库不相关历史版本解决方案
    vue-cli项目实现动态锚点定位
    jQuery加css3实现菜单栏组件(可无限添加子列表)
    JavaScript文件转成base64编码
    Ajax获取服务器响应头部信息
  • 原文地址:https://www.cnblogs.com/hzqblog/p/7498587.html
Copyright © 2011-2022 走看看