前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现一个计时器(Timer)

Python实现一个计时器(Timer)

原创
作者头像
AIFEx
发布2023-09-28 09:57:20
6210
发布2023-09-28 09:57:20
举报
文章被收录于专栏:AIFEx的专栏AIFEx的专栏

0. 标题

Python实现一个计时器(Timer)

1. time类

time类是python的内置类,只需要直接import即可:

代码语言:python
复制
from time import time

我们用time类获取一下当前的时间戳:

代码语言:python
复制
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
复制
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

这个实现很简单:

  1. 我们在函数执行前,用start_time记录一下当前的时间戳
  2. 执行foo函数
  3. 执行后,用end_time记录一下结束的时间戳
  4. 用end_time - start_time来计算foo消耗的时间。

这种实现很直观,但是如果很多函数需要用计时器来测试或者记录,就需要重复很多这样的代码,整个代码结构就会变得支离破碎。

接下来,我们用装饰器,实现一个封装,起到方便复用的作用。

3. 装饰器实现一个计时器

装饰器的原理可以参加另一篇文章《Python装饰器(Python Decorator)介绍》

代码语言:python
复制
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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 标题
  • 1. time类
  • 2. 实现一个简单的计时器
  • 3. 装饰器实现一个计时器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档