• 装饰器进阶


    装饰器进阶
    查看函数内包含的函数名和日志
    func.__name__
    func.__doc__
    子主题 3
    解决办法:
    from functools import wraps
    在外层函数内顶层@wraps(f)

    开方封闭原则
    对修改是封闭的
    对扩展是开方的

    带参数的装饰器
    由来:许多个函数,经常在需要被装饰与不装饰直间切换
    格式:

    flag = True
    def outer(flag):
    def wrapper(f):
    def inner(*args, **kwargs):
    if flag:
    print('函数执行前的操作')
    ret = f(*args, **kwargs)
    if flag:
    print('函数执行后的操作')
    return ret
    return inner
    return wrapper


    @outer(flag)
    def func(*args, **kwargs):
    pass

    func()

    只需要修改flag就可以是否开启装饰器

    多个装饰器装饰一个函数
    执行步骤
    def wrapper1(f):
    def inner1(*args, **kwargs):
    print('decorator 1 before')
    ret = f(*args, **kwargs)
    print('decorator 1 after')
    return ret
    return inner1


    def wrapper2(f):
    def inner2(*args, **kwargs):
    print('decorator 2 before')
    ret = f(*args, **kwargs)
    print('decorator 2 after')
    return ret
    return inner2

    @wrapper2
    @wrapper1
    def func():
    print('-'*10)

    func()

  • 相关阅读:
    spring源码阅读(一)
    多线程学习(十)
    多线程学习(九)
    多线程学习(八)
    多线程学习(七)
    多线程学习(六)
    多线程学习(五)
    多线程学习(四)
    matlab-table
    Matlab
  • 原文地址:https://www.cnblogs.com/2018-01-30/p/8417899.html
Copyright © 2020-2023  润新知