zoukankan      html  css  js  c++  java
  • python3


    装饰器(decorator)应用的场景:
    1、引入日志
    2、函数执行时间统计
    3、执行函数前预备处理
    4、执行函数后清理处理
    5、权限校验等场景
    6、缓存


    # 通用装饰器
    import functools

    def log(func):
    # 若是不加这个,test()函数经过装饰后,test.__name_ 变成了 wrapper
    # 让test.__name_ 仍为test,不需要编写wrapper.__name__ = func.__name__,Python内置的functools.wraps就是干这个事
    @functools.wraps(func)
    def wrapper(*args, **kw):
    print('call %s():' % func.__name__)
    return func(*args, **kw)
    return wrapper

    # 针对带参数的装饰器
    import functools

    def log(text):
    def decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
    print('%s %s():' % (text, func.__name__))
    return func(*args, **kw)
    return wrapper
    return decorator

    # 只要python解释器执行到了这个代码,那么就会自动的进行装饰,
    # 而不是等到运行的的时候才装饰

    # 1、先执行log('ok')函数,这个函数return的结果就是decorator这个函数的引用
    # 2、进而使用@decorator对test进行装饰
    @log('ok') # 相当于执行了 now = log('execute')(now)
    def test():
    print('...test...')

    # 在调用test之前,就已经进行了装饰
    test()
    print(test.__name__) # test
  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/AndyChen2015/p/7406810.html
Copyright © 2011-2022 走看看