0. 标题
Python实现一个计时器(Timer)
1. time类
time类是python的内置类,只需要直接import即可:
代码语言:python代码运行次数:0复制from time import time
我们用time类获取一下当前的时间戳:
代码语言:python代码运行次数:0复制from time import time
# timestampe
ts = time()
print(ts)
# 1695864961.9690828
ts的整数部分单位是秒,小数部分是毫秒微秒。
这个时间戳被称为unix timestamp,表示的是自从1970年1月1日0时0分0秒到现在流逝的时间,
since January 1st, 1970 at 00:00:00 ETC。
2. 实现一个简单的计时器
先看一个很简单的实现:
代码语言:python代码运行次数:0复制def foo():
x = 0
for i in range(100000):
x = i
return x
from time import time
start_time = time()
foo()
end_time = time()
print("time elapsed: {} secondes".format(start_time))
# time elapsed: 1695865191.565248 secondes
这个实现很简单:
- 我们在函数执行前,用start_time记录一下当前的时间戳
- 执行foo函数
- 执行后,用end_time记录一下结束的时间戳
- 用end_time - start_time来计算foo消耗的时间。
这种实现很直观,但是如果很多函数需要用计时器来测试或者记录,就需要重复很多这样的代码,整个代码结构就会变得支离破碎。
接下来,我们用装饰器,实现一个封装,起到方便复用的作用。
3. 装饰器实现一个计时器
装饰器的原理可以参加另一篇文章《Python装饰器(Python Decorator)介绍》
代码语言:python代码运行次数:0复制from time import time
def time(func):
def wrapper(*args, **kwargs):
start_time = time()
func(*args, **kwargs)
end_time = time()
print(f'time taken for {func.__name__}:', end_time-start_time, 'seconds')
return wrapper
@timethis
def test1():
for i in range(100000):
x = 1
@timethis
def test2():
for i in range(1000000):
x = 1
@timethis
def test3():
for i in range(1000000):
x = 1
test1()
test2()
test3()
# time taken for test1: 0.011172771453857422 seconds
# time taken for test2: 0.041152000427246094 seconds
# time taken for test3: 0.029973983764648438 seconds