Python中实现装饰模式的三种方式
2024-09-03 23:25:43
功能目标
编写一个可以打印被装饰函数名称、执行时间、内存地址得装饰器
前置依赖包
import time
import functools
from decorator import decorator
基于普通的函数嵌套
> def log1(fn):
def _wrapper(*args, **kwargs):
start = time.clock()
result = fn(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (fn.__name__, str(time.time() - start), id(fn)))
return result
return _wrapper
基于@decorator
@decorator
def log(f, *args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
使用@functools
def log2(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
start = time.clock()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
return wrapper
测试
@log2
def f11(x, y):
return x**y
result = f11(2,3)
print("result:" + str(result))
切换到不同的实现中,他们的效果是相同的。
最新文章
- Oracle数据库文件路径变更
- C#中使用FreeImage库加载Bmp、JPG、PNG、PCX、TGA、PSD等25种格式的图像(源码)。
- softwareTesting_work2_question2
- MATLAB axis和axes的区别
- Range
- django 一些库
- mine layer(2008 World Final C)
- iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/
- 7款纯CSS3实现的炫酷动画应用
- 初学C++,开博第一篇
- HTTP Authorization
- xp每天定时关机命令
- 【个人笔记】《知了堂》mysql表连接
- ajaxfileupload原理及用法,主要用于即想用ajax序列化传递参数,又必须上传文件
- [MicroPython]TurnipBit开发板DIY自动浇水系统
- Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法
- Windows10下pip的配置文件设置
- leetcode 443. String Compression
- 解题:JSOI 2008 Blue Mary的战略地图
- 小程序的movable-view怎么持续移动