• 装饰器


    一. 装饰器
    什么是装饰器, :闭包的一个应用, 外层函数返回内层函数, 并且不改变内层函数的执行方式以及结果
    旨在内层函数执行前后加一些功能, 原函数的结构不做修改

    for Eone :
    def wrapper(func):
    def inner(*args, **kwargs):
    print("函数执行前")
    ret = func(*args,**kwargs)
    print('函数执行后')
    return ret

    return inner


    @wrapper
    def add(x, y):
    print(x, '+', y)
    return x + y


    print(add(2, 3))


    for Etwo
    def outer(flag):
    def wrapper(func):
    def inner(*args, **kwargs):
    if flag:
    print('要执行打印')
    ret = func(*args, **kwargs)
    if flag:
    print('执行打印,函数执行完毕')
    return ret
    return inner

    return wrapper


    # flag = True
    flag = False


    @outer(flag)
    def add(x, y):
    print(x, '+', y)
    return x + y


    print(add(3, 2))



    for E3:
    def wrapper1(func):
    def inner(*args, **kwargs):
    print("order1")
    ret = func(*args, **kwargs)
    print(('order2'))
    return ret

    return inner


    def wrapper2(func):
    def inner(*args, **kwargs):
    print("order3")
    ret = func(*args, **kwargs)
    print(('order4'))
    return ret

    return inner

    # @wrapper
    @wrapper2
    @wrapper1
    def add(x, y):
    print(x, '+', y)
    return x + y


    print(add(3, 6)) # order3, order1, 2+3 , order2, order4 ret(5)

    '''
    @wrapper
    @wrapper2
    @wrapper1
    def add(x, y):
    print(x, '+', y)
    return x + y



    二. 装饰器修复技术: 引入工具, 将原函数的文档,以及属性等等还原给inner,消除inner带来的影响
    from functools import wraps

    def wrapper0(func):
    @wraps(func) # 看这里
    def inner(*args, **kwargs):
    '''
    doc: 这个闭包可以用, 没什么用
    写写文档
    '''

    print("函数执行前")
    ret = func(*args,**kwargs)
    print('函数执行后')
    return ret

    return inner


    @wrapper0
    def add0(x, y):
    print(x, '+', y)
    return x + y

    print(add0.__name__)
  • 相关阅读:
    经验1
    Caffe和MatConvNet安装
    Matconvet的学习笔记
    CNN数据准备
    深度学习之卷积和池化
    深度学习之CNN的推导
    深度学习八(总结)
    深度学习七(卷积神经网络)
    深度学习六
    深度学习五
  • 原文地址:https://www.cnblogs.com/tcpblog/p/10065828.html
Copyright © 2020-2023  润新知