练习内容:
(1)函
数装饰器。
(2)使用魔术方法__call__,将一个类实现为装饰器。
(3)使用魔术方法__enter__与__exit__,实现一个类,使其能为函数提供上下文管理功能。
1.函数装饰器
1
__author__ = ‘Orcsir‘ 2from functools import wraps, update_wrapper
3import time
4 5 6# 将一个函数实现为装饰器 7def timeit(func):
8 @wraps(func)
9def _wrapper(*args, **kwargs):
10print("Inject some code before func run.")
1112 ret = func(*args, **kwargs)
1314print("Inject some code after func run.")
1516return ret
1718return _wrapper
192021@timeit
22def func(*args, **kwargs):
23print("func start processing.")
24 time.sleep(2) # 模拟处理时间25print("func end processing.")
26return None
2728# Test29 func(1,2)
2.使用魔术方法__call__,将一个类实现为装饰器
1
__author__ = ‘Orcsir‘ 2from functools import wraps, update_wrapper
3import time
4 5# 将一个类实现为装饰器 6class TimeIt:
7def__init__(self, wrapped):
8 self.__wrapped = wrapped
9 wraps(wrapped)(self)
1011def__call__(self, *args, **kwargs):
12print("Inject some code before func run.")
13 ret = self.__wrapped(*args, **kwargs)
14print("Inject some code after func run.")
15return ret
161718@TimeIt
19def func(*args, **kwargs):
20print("func start processing.")
21 time.sleep(2) # 模拟处理时间22print("func end processing.")
23return None
2425# Test26 func()
3.使用魔术方法__enter__与__exit__,实现一个类,使其能为函数提供上下文管理功能
1
__author__ = ‘Orcsir‘ 2from functools import wraps, update_wrapper
3import time
4 5# 实现一个类,使其为函数提供上下文管理功能 6class ContextMage4Func:
7def__init__(self, func):
8 self.__func = func
910def__enter__(self):
11print("为func函数的运行准备环境.")
12return self.__func1314def__exit__(self, exc_type, exc_val, exc_tb):
15print("func函数退出或出现异常时,做一些清理工作.")
161718def func(*args, **kwargs):
19print("func start processing.")
20 time.sleep(2) # 模拟处理时间21print("func end processing.")
22return None
2324# Test25with ContextMage4Func(func):
26 func(1, 2)
27print("~~~~~~~~~~~~~~~~~~~~~~")
28with ContextMage4Func(func) as f:
29 f(1, 2)
原文:https://www.cnblogs.com/orcsir/p/9029328.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!