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
  • 相关阅读:
    Linux内核从原理到代码详解
    linux内核研究-8-块设备I/O层
    《Linux内核分析》课程总结
    Nginx 重写规则指南1
    Nginx初探
    Nginx源码分析:3张图看懂启动及进程工作原理
    nginx源码分析 +redis的那些事儿
    I/O 模型及其设计模式
    高并发性能调试经验分享
    myawr
  • 原文地址:https://www.cnblogs.com/AndyChen2015/p/7406810.html
Copyright © 2011-2022 走看看