一、什么是装饰器(decorator)
简单来说,可以把装饰器理解为一个包装函数的函数,它一般将传入的函数或者是类做一定的处理,返回修改之后的对象.所以,我们能够在不修改原函数的基础上,在执行原函数前后执行别的代码.比较常用的场景有日志插入,事务处理等.
二、装饰器分为:基本装饰器(不带参数)、带参数装饰器、类版装饰器
三、各类装饰器简介
1.基本装饰器
装饰器:
# def wrapper(func):
# print(func)
# def new_func(*new_argument):
# print('before')
# result=func(*new_argument)
# print('after')
# return result*2
# return new_func
利用基本输出语句的优先级来实现
2.带参数装饰器
# 带参数的装饰器:
# def wrapper(argument):
# print(argument)
# def intermediate(func):
# def new_func(*args):
# print('before',argument)
# result=func(*args)
# print('after',argument)
# return result*2
# return new_func
# return intermediate
# @wrapper('luck')
# def row_func(a,b):
# print('hello',a,b)
# return a+b
# # row_func=wrapper(row_func)
# print(row_func(10,20))
构造一个函数,将所需装饰的内容以传参的形式传入,然后输出有效形式即可。
3.类装饰器
由于装饰器仅需举一反三即可,内容大致可举例说明,其重点在于参数的传递以及装饰品的定义。
# 类版装饰器:
# class wrapper:
# def __init__(self,func):
# self.func=func
# def __call__(self, *args):
# print('before')
# result=self.func(*args)
# print('after')
# return result*2
#带参数的
# class wrapper:
# def __init__(self,argument):
# self.argument=argument
# def __call__(self, func):
# def new_func(*args):
# print('before',self.argument)
# result=func(*args)
# print('after',self.argument)
# return new_func
# @wrapper('luck')
# def row_func(a):
# print('hello',a)
# return a
# row_func(10)