1.普通方式
import time
start = time.perf_counter()
nums = []
for i in range(10000):
nums.append(i ** 2)
end = time.perf_counter()
print(end - start)
0.0025673000200185925
2.装饰器的方式
import time
def timer(fun):
def wrapper(*args, **kwargs):
start = time.perf_counter()
fun(*args, **kwargs)
stop = time.perf_counter()
return stop - start
return wrapper
@timer
def my_fun():
nums = []
for i in range(10000):
nums.append(i ** 2)
res = my_fun()
print(res)
0.0015125999925658107
3.使用上下文的方式
class Timer:
def __init__(self):
self.elapsed = 0
def __enter__(self):
self.start = time.perf_counter()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.stop = time.perf_counter()
self.elapsed = self.stop - self.start
with Timer() as timer:
nums = []
for i in range(10000):
nums.append(i ** 2)
print(timer.elapsed)
0.0025462000048719347
总结
第二种和第三种实际上是对python高阶编程里面的装饰器(decorator)以及上下文管理器(contect_manager)的理解和使用。