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

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

    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__)
  • 相关阅读:
    【掉下巴】枪的制造现场
    不引入第三个变量交换两个变量的方法
    [转]科学计算经典算法
    [小练eVC]常用控件之微调按钮
    【收购】LSI 40亿美元并购Agere
    VB6.0不支持鼠标滚轮的解决办法
    一个简单的BP网络C语言程序
    [转]想成为嵌入式程序员应知道的0x10个基本问题
    [zt]关于左值"lvalue"和右值"rvalue"的一点理解
    [掉下巴]细数非洲大山的肘下亡魂
  • 原文地址:https://www.cnblogs.com/tcpblog/p/10065828.html
Copyright © 2011-2022 走看看