time模块
一、time模块的核心用途
time模块主要用于处理时间戳、系统时间操作、程序计时和休眠。
它提供的是基础且高效的时间管理工具。
二、核心方法
1. 获取当前时间戳
-
time.time()
功能:返回当前时间到“1970年1月1日0点(UTC)”的秒数(含小数位,精确到微秒)。
用途:计算代码耗时、记录事件时间点。
示例:start = time.time() # 执行代码... end = time.time() print(f"耗时:{end - start:.2f}秒") # 输出:耗时:0.35秒
2. 时间戳与结构化时间互转
-
time.localtime([secs])
功能:将时间戳转为本地时间的结构化对象(struct_time),不传参数则用当前时间。
示例:now_struct = time.localtime() print(now_struct.tm_year) # 输出:2025(年份) -
time.mktime(struct_time)
功能:将struct_time转回时间戳(需注意时区对应)。
示例:timestamp = time.mktime(now_struct) # 与time.time()结果一致
3. 时间格式化与解析
-
time.strftime(format, struct_time)
功能:将时间对象格式化为字符串。
常用格式符:
%Y:四位年份(如2025)
%m/%d:两位月/日(如04/15)
%H:%M:%S:时分秒(如14:30:45)
示例:formatted = time.strftime("%Y-%m-%d", now_struct) print(formatted) # 输出:2025-04-15 -
time.strptime(string, format)
功能:将字符串按格式解析为struct_time。
示例:parsed = time.strptime("2025-04-15", "%Y-%m-%d") print(parsed.tm_mon) # 输出:4(4月)
4. 程序休眠与计时
-
time.sleep(seconds)
功能:让程序暂停执行指定秒数(支持小数)。
场景:定时任务、避免高频请求。
示例:print("等待3秒...") time.sleep(3) # 暂停3秒 print("继续执行") -
高精度计时器
time.perf_counter():适合测量短时间间隔(如函数执行时间)。
time.monotonic():保证时间不会回退(适合长时间任务)。
示例:t1 = time.perf_counter() # 执行代码... t2 = time.perf_counter() print(f"耗时:{t2 - t1:.6f}秒") # 输出:耗时:0.000123秒
5. 其他实用方法
-
time.ctime([secs])
功能:将时间戳转为易读字符串(如Tue Apr 15 14:30:45 2025)。
示例:print(time.ctime()) # 输出:Tue Apr 15 14:30:45 2025 time.gmtime([secs])
功能:类似localtime(),但返回UTC时间的结构化对象。
三、注意事项
时区问题:
localtime()结果依赖系统时区,gmtime()始终用UTC。
跨时区项目建议用datetime模块结合zoneinfo处理。时间戳精度:
不同操作系统下,time.time()的精度可能不同(通常到微秒)。休眠误差:
time.sleep(0.1)的实际暂停时间可能略大于0.1秒(系统调度影响)。
四、使用场景
-
倒计时功能:
def countdown(seconds): for i in range(seconds, 0, -1): print(f"剩余:{i}秒", end='\r') time.sleep(1) print("时间到!") -
定时执行任务:
while True: print("执行每日任务...") time.sleep(86400) # 24小时后再次执行 -
性能测试工具:
def measure(func): start = time.perf_counter() func() end = time.perf_counter() print(f"函数执行时间:{end - start:.4f}秒")
五、使用案例
5.1 案例代码
import time
def show(text, delay=0.05):
"""
===逐字显示文本内容===
参数:
text (str): 待处理文本,支持中文标点及格式符号
delay (float): 基础字符间隔时间,默认0.1秒
功能说明:
1. 实现字符级逐字打印
2. 根据标点类型动态调整停顿时间
3. 处理中文排版特殊符号
4. 支持文本情感节奏控制
"""
for w in text:
# 即时刷新输出缓冲区,避免延迟显示
print(w, end="", flush=True)
# 停延处理逻辑
if w == "\n":
# 段落换行时延长等待(2倍基础时间)
time.sleep(delay * 2)
elif w in (" ", "\t"):
# 空格/缩进延长等待(3倍基础时间)
time.sleep(delay * 3)
elif w in (",", "。", "!", "?", ";"):
# 中文标点延长等待(1.5倍基础时间)
time.sleep(delay * 1.5)
else:
# 常规字符间隔
time.sleep(delay)
text = """\t侠客行\n\t唐·李白
赵客缦胡缨,吴钩霜雪明。
银鞍照白马,飒沓如流星。
十步杀一人,千里不留行。
事了拂衣去,深藏身与名。
闲过信陵饮,脱剑膝前横。
将炙啖朱亥,持觞劝侯嬴。
三杯吐然诺,五岳倒为轻。
眼花耳热后,意气素霓生。
救赵挥金槌,邯郸先震惊。
千秋二壮士,烜赫大梁城。
纵死侠骨香,不惭世上英。
谁能书阁下,白首太玄经。
"""
start = time.time() # 开始时间
show(text) # 执行函数
end = time.time() # 结束时间
print(f"\n共计耗时:{end - start:.2f}秒")
current_time = time.localtime() # 当前时间
formatted_time = time.strftime("当前时间:%Y-%m-%d %H:%M:%S", current_time)
print(formatted_time, "\n")
5.2 案例说明
在Python的print()函数中,flush=True参数用于强制将输出缓冲区的内容立即显示在终端上。
1. 什么是输出缓冲区?
-
缓冲区机制:
为了提高效率,Python不会立即将每次print()的内容显示在屏幕上,而是先存储在内存中的输出缓冲区,等到一定条件满足时(如缓冲区满、遇到换行符、程序结束)再统一输出。 -
默认行为:
当print()的内容包含换行符(\n)时,缓冲区会自动刷新;
但如果内容没有换行符(如print("Hello", end="")),则可能不会立即显示。
2. flush=True的作用
-
强制刷新缓冲区:
无论内容是否包含换行符,flush=True会立即将缓冲区中的内容输出到终端。 -
应用场景:
实时显示进度(如加载动画、逐字输出)。
交互式程序(如命令行游戏)。
调试输出(确保关键信息立即显示)。
5.3 案例演示
