博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python编程之基础知识练习_002
阅读量:5162 次
发布时间:2019-06-13

本文共 2122 字,大约阅读时间需要 7 分钟。

练习内容:

 (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 ret17 18     return _wrapper19 20 21 @timeit22 def func(*args, **kwargs):23     print("func start processing.")24     time.sleep(2)  # 模拟处理时间25     print("func end processing.")26     return None27 28 # Test29 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 ret16 17 18 @TimeIt19 def func(*args, **kwargs):20     print("func start processing.")21     time.sleep(2)  # 模拟处理时间22     print("func end processing.")23     return None24 25 # Test26 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.__func13 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 None23 24 # Test25 with ContextMage4Func(func):26     func(1, 2)27 print("~~~~~~~~~~~~~~~~~~~~~~")28 with ContextMage4Func(func) as f:29     f(1, 2)

 

转载于:https://www.cnblogs.com/orcsir/p/9029328.html

你可能感兴趣的文章
jquary常见问题总结
查看>>
Javascript中eval解析的json的几种用法
查看>>
Dashbroad 展现数据
查看>>
Codeforces Round #485 (Div. 2)
查看>>
bzoj4447 SCOI2015 小凸解密码 password
查看>>
解析Ceph: RBDCache 背后的世界
查看>>
qt安装遇到的错误
查看>>
Linux下which、whereis、locate、find 区别
查看>>
h.264加权预测
查看>>
as4 通过yum自动升级实现
查看>>
学习springMVC实例1——配置和跳转到HelloWorld
查看>>
寻找完美平方数
查看>>
初学反编译-.-
查看>>
防御式编程
查看>>
单线程并发的server端
查看>>
View可以设置tag携带数据
查看>>
individual reading task ---12061183 叶露婷
查看>>
delphi的消息对话框
查看>>
java:Apache Shiro 权限管理
查看>>
38.输出1到最大的N位数[Print 1 to max number of N bits]
查看>>