1、普通装饰器:
def hello(func):
def warpper(*args, **kwargs):
print(f"当前是{func.__name__}在运行")
func(*args, **kwargs) # 这里运行要调用这个装饰器的函数
print(f"{func.__name__}运行完毕")
return warpper # 这里是hello这个装饰器返回warpper这个函数
@hello
def deco():
print("是我在调用hello装饰器")
if __name__ == '__main__':
deco()
打印如下:
2、带参数的装饰器
logging.basicConfig(
# filename=os.path.join(os.getcwd(), 'all.log'),
level=logging.DEBUG,
format='%(asctime)s %(filename)s : %(levelname)s %(message)s', # 定义输出log的格式
# filemode='a',
datefmt='%Y-%m-%d %A %H:%M:%S',
)
def log_level(level):
def deco(func):
def wrapper(*args, **kwargs):
if level == "debug":
logging.debug(f"当前运行的是: {func.__name__}.")
func(*args, **kwargs)
return wrapper # deco函数返回wrapper函数,第一层返回
return deco # log_level函数返回deco函数,第二层返回
@log_level("debug")
def enen():
lists = [98, 45, 69, 74, 1, 67]
count = len(lists)
for i in range(0, count):
for j in range(i+1, count):
if lists[i] > lists[j]:
lists[i], lists[j] = lists[j], lists[i]
print(lists)
return lists
if __name__ == '__main__':
enen()
输出如下:
个人总结,只要明白了一个函数用另一个函数作为参数,同时一个函数返回另一个函数的概念,就能大概理解装饰器是什么东西了。