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

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、Linux学习问题记录{}{}{}{}{}{}
2、(转载)全面理解JavaScript中的caller,callee,call,apply
3、[ios]多线程(基础)
4、只加载一个css文件(转载)
5、Oracle笔记4-pl/sql-分支/循环/游标/异常/存储/调用/触发器


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号