Python的装饰器是什么?

装饰器本质是一个可调用的函数,用于修正函数或类,它可以让其他函数在不需要做任何代码改动的前提下增加额外功能。
接收一个函数作为参数,添加一些功能,然后返回它。
Multiple 多重装饰器按照应用的顺序依次执行。

主要有以下一些场景:

  • 引入日志
  • 函数执行时间统计
  • 执行函数前预备处理
  • 执行函数后的清理功能
  • 权限校验等场景
  • 缓存

示例一

import functools

def deco(func):
    @functools.wraps(func) #加在最内层函数正上方
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper

@deco
def index():
    "还好还好"
    x = 10
    print('from index')

print(index.__name__)
print(index.__doc__)

# 加@functools.wraps
# index
# 还好还好

# 不加@functools.wraps
# wrapper
# None

示例二

def test_decorator(func):
    def function_wrapper(x):
        print("Before calling " + func.__name__)
        res = func(x)
        print(res)
        print("After calling " + func.__name__)
    return function_wrapper


@test_decorator
def sqr(n):
    return n ** 2
sqr(54)
posted @ 2021-01-21 15:08  皎然CEO  阅读(112)  评论(0编辑  收藏  举报