【面试出题】基础-装饰器

实现一个装饰器,统计函数执行的时间和被调用的次数

复制代码
 1 # !/usr/bin/env python
 2 # coding:utf-8
 3 import time
 4 from functools import wraps
 5 
 6 # 第一种 函数装饰器
 7 def timeCounter(func):
 8     num = 0
 9     @wraps(func)
10     def wrapper(*args, **kwargs):
11         nonlocal num
12         startTime = time.time()
13         func(*args, **kwargs)
14         num += 1
15         endTime = time.time()
16         return (num,round(endTime-startTime, 2))
17     return wrapper
18 
19 @timeCounter
20 def add(a, b):
21     time.sleep(2.115)
22     return a+b
23 
24 print(add(1,2))
25 print(add(1,3))
26 
27 # 第二种 类装饰器
28 class TimeCounter:
29     def __init__(self, func):
30         self.func = func
31         self.count = 0
32 
33     def __call__(self, *args, **kwargs):
34         start_time = time.time()
35         self.func(*args, **kwargs)
36         end_time = time.time()
37         self.count += 1
38         return (self.count, round(end_time - start_time, 2))
39 @TimeCounter
40 def add(a, b):
41     time.sleep(2.115)
42     return a+b
43 print(add(1, 3))
复制代码

 

posted @   gtea  阅读(211)  评论(2编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示