关于装饰器的用法整理
关于装饰器的用法整理
关于装饰器的一些基本的用法,请点击底部的链接学习!
请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间:
import functools
import time
def metric(fn):
@functools.wraps(fn) #把原始函数的__name__等属性复制到wrapper()函数中
def wrapper(*args, **kw):
start = time.time() # 单位为 s
res = fn(*args, **kw)
time.sleep(0.001)
end = time.time()
t = (end - start) * 1000
print('%s executed in %.2f ms' % (fn.__name__, t))
return res
return wrapper
@metric
def now():
print("2021-6-6")
now()
请编写一个decorator,能在函数调用的前后打印出’begin call’和’end call’的日志。
import functools
def log(str):
def decorator(fn):
@functools.wraps(fn)
def wrapper(*args, **kw):
if callable(str):
print('begin call %s():' % fn.__name__)
res = fn(*args, **kw)
print('end call %s():' % fn.__name__)
return res
else:
print('%s begin call %s():' % (str, fn.__name__))
res = fn(*args, **kw)
print('%s end call %s():' % (str, fn.__name__))
return res
return wrapper
if callable(str):
return decorator(str)
return decorator
@log
def now():
print("2021-6-6")
now()
@log("execute")
def now():
print("2021-6-6")
now()
既支持@log(),又支持@log(‘execute’):
import functools
def log(str):
def decorator(fn):
@functools.wraps(fn)
def wrapper(*args, **kw):
if callable(str):
print('call %s():' % fn.__name__)
return fn(*args, **kw)
else:
print('%s %s():' % (str, fn.__name__))
return fn(*args, **kw)
return wrapper
if callable(str):
return decorator(str)
return decorator
@log
def now():
print("2021-6-5")
now()
@log("execute")
def now():
print("2021-6-5")
now()
【华为OD机试真题】可以转到CSDN相关专栏订阅学习:https://blog.csdn.net/weixin_45541762/article/details/129903356
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】