Python实现一个计时器(Timer)

本文介绍了如何使用Python内置的time类获取时间戳,并通过实例展示了如何实现一个简单的计时器。为了提高代码复用性,文章进一步探讨了利用装饰器实现计时器的方法,使得在多个函数中应用计时功能变得更加简洁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 标题

Python实现一个计时器(Timer)

作者: quantgalaxy@outlook.com   
blog: https://blog.youkuaiyun.com/quant_galaxy  
欢迎交流

1. time类

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

from time import time

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

from time import time

# timestampe
ts = time()

print
### Python实现计时功能的方法 在 Python 中,可以通过多种方式实现计时功能。以下是几种常见的方法及其具体实现: #### 使用 `time` 模块实现基本计时 通过记录起始时间和结束时间之间的差值,可以计算经过的时间。这种方法适用于简单的场景。 ```python import time start_time = time.time() # 记录开始时间 # 执行某些操作... end_time = time.time() # 记录结束时间 elapsed_time = end_time - start_time # 计算耗时 print(f"程序运行时间为: {elapsed_time:.2f} 秒") # 输出结果[^1] ``` #### 实现秒表功能 如果需要实时显示已经过去的时间,则可以利用循环不断读取当前时间并打印差异。以下是一个基于控制台的秒表实现示例: ```python import time input("点击 Enter 键开始计时...") # 用户触发启动 start_time = time.time() while True: elapsed_seconds = round(time.time() - start_time) # 获取已过时间 print(f"\r{elapsed_seconds} 秒", end="") time.sleep(1) # 减少 CPU 占用率[^2] ``` 此代码会每秒钟刷新一次屏幕上的输出,展示自按下回车以来所经历的总秒数。 #### GUI 倒计时器 (Tkinter) 对于更友好的用户体验,还可以创建图形化界面的应用程序来进行倒计时或正向计时。这里给出一个 Tkinter 的例子用于构建倒计时窗口: ```python import tkinter as tk from tkinter import messagebox import time def gui_countdown(root, remaining): if remaining <= 0: root.destroy() messagebox.showinfo("完成!", "倒计时结束!") else: label.config(text=f"剩余时间:{remaining} 秒") root.after(1000, lambda: gui_countdown(root, remaining-1)) root = tk.Tk() root.title("倒计时") label = tk.Label(root, font=('Helvetica', 48), text="准备开始...") label.pack(padx=20, pady=20) total_seconds = 10 # 设定倒计时时长 gui_countdown(root, total_seconds) root.mainloop()[^3] ``` 上述脚本定义了一个递归调用来持续减少剩余时间直到达到零为止,并且每次都会更新标签中的文字内容反映最新状态。 #### 高级计时器类封装 为了提高可重用性和灵活性,也可以设计成面向对象的形式来管理定时任务: ```python class Stopwatch: def __init__(self): self._start_time = None def start(self): """Start the stopwatch.""" if not self.is_running(): self._start_time = time.perf_counter() def stop(self): """Stop and return elapsed time since last start call.""" if self.is_running(): elapsed = time.perf_counter() - self._start_time self._start_time = None return elapsed raise RuntimeError("Stopwatch is not running.") def reset(self): """Reset internal state without stopping.""" self._start_time = None def split(self): """Return current elapsed time but do NOT stop.""" if self.is_running(): return time.perf_counter() - self._start_time raise RuntimeError("Cannot perform 'split' when stopped.") def is_running(self): """Check whether stopwatch has been started yet.""" return self._start_time is not None stop_watch = Stopwatch() stop_watch.start() # ... some code ... lap_time = stop_watch.split() final_result = stop_watch.stop() print(f"Lap Time was {lap_time:.2f}s Total Elapsed={final_result:.2f}s")[^4] ``` 这种结构允许开发者更加精细地操控整个过程——既可以单独测量某段特定逻辑所需花费多久;也能累积统计多个阶段加起来的整体表现情况等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

novowindx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值