Python編程之基礎知識練習_002
阿新 • • 發佈:2018-05-12
tar time imp roc 魔術方法 class sta family 函數實現
練習內容:
(1)函數裝飾器。
(2)使用魔術方法__call__,將一個類實現為裝飾器。
(3)使用魔術方法__enter__與__exit__,實現一個類,使其能為函數提供上下文管理功能。
1.函數裝飾器
1 __author__ = ‘Orcsir‘ 2 from functools import wraps, update_wrapper 3 import time 4 5 6 # 將一個函數實現為裝飾器 7 def timeit(func): 8 @wraps(func) 9 def _wrapper(*args, **kwargs): 10 print("Inject some code before func run.") 11 12 ret = func(*args, **kwargs) 13 14 print("Inject some code after func run.") 15 16 return ret 17 18 return _wrapper 19 20 21 @timeit 22 def func(*args, **kwargs): 23 print("func start processing.") 24 time.sleep(2) #模擬處理時間 25 print("func end processing.") 26 return None 27 28 # Test 29 func(1,2)
2.使用魔術方法__call__,將一個類實現為裝飾器
1 __author__ = ‘Orcsir‘ 2 from functools import wraps, update_wrapper 3 import time 4 5 # 將一個類實現為裝飾器 6 class TimeIt: 7 def __init__(self, wrapped): 8 self.__wrapped= wrapped 9 wraps(wrapped)(self) 10 11 def __call__(self, *args, **kwargs): 12 print("Inject some code before func run.") 13 ret = self.__wrapped(*args, **kwargs) 14 print("Inject some code after func run.") 15 return ret 16 17 18 @TimeIt 19 def func(*args, **kwargs): 20 print("func start processing.") 21 time.sleep(2) # 模擬處理時間 22 print("func end processing.") 23 return None 24 25 # Test 26 func()
3.使用魔術方法__enter__與__exit__,實現一個類,使其能為函數提供上下文管理功能
1 __author__ = ‘Orcsir‘ 2 from functools import wraps, update_wrapper 3 import time 4 5 # 實現一個類,使其為函數提供上下文管理功能 6 class ContextMage4Func: 7 def __init__(self, func): 8 self.__func = func 9 10 def __enter__(self): 11 print("為func函數的運行準備環境.") 12 return self.__func 13 14 def __exit__(self, exc_type, exc_val, exc_tb): 15 print("func函數退出或出現異常時,做一些清理工作.") 16 17 18 def func(*args, **kwargs): 19 print("func start processing.") 20 time.sleep(2) # 模擬處理時間 21 print("func end processing.") 22 return None 23 24 # Test 25 with ContextMage4Func(func): 26 func(1, 2) 27 print("~~~~~~~~~~~~~~~~~~~~~~") 28 with ContextMage4Func(func) as f: 29 f(1, 2)
Python編程之基礎知識練習_002