- import time
- def logger(msg):
- def time_master(func):
- def wrapper():
- print(f"[{msg}] 开始运行程序") # 使用传入的msg参数
- start = time.time()
- result = func()
- stop = time.time()
- print(f"[{msg}] 结束程序运行")
- print(f"耗时:{(stop-start):.2f}秒")
- return result
- return wrapper
- return time_master # 注意这个return要和time_master定义对齐
- @logger(msg="A")
- def funa():
- time.sleep(2)
- print("正在调用funa")
- return 666
- @logger(msg="B")
- def funb():
- time.sleep(1)
- print("正在调用funb")
- return 555
- funa()
- funb()
复制代码
错误原因及解决方法:
1.
缩进错误:原代码中
return time_master 缩进不正确,应该与
time_master 的定义对齐(缩进相同层级)
2.
参数未使用:原代码虽然传递了msg参数,但没有在装饰器中实际使用(修正版已在打印语句中添加msg显示)
3.
完整修正要点:
- 确保装饰器工厂函数的三层嵌套结构
- 外层logger接收参数msg
- 中间层time_master接收被装饰函数func
- 内层wrapper实现具体包装逻辑
运行修正后的代码,可以看到带参数msg的装饰效果:
- [A] 开始运行程序
- 正在调用funa
- [A] 结束程序运行
- 耗时:2.00秒
- [B] 开始运行程序
- 正在调用funb
- [B] 结束程序运行
- 耗时:1.00秒
复制代码
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。