Python进度条神器tqdm的使用指南

 更新时间:2026年03月26日 09:22:46   作者:白酒永远的神  
在日常使用 Python 进行数据处理、模型训练或批量任务时,我们常常会遇到长时间运行的循环,tqdm是一个快速、可扩展且美观的进度条库,能够轻松地为你的 Python 循环添加进度提示,本文给大家介绍了Python进度条神器tqdm的使用指南,需要的朋友可以参考下

在日常使用 Python 进行数据处理、模型训练或批量任务时,我们常常会遇到长时间运行的循环。如果没有一个直观的反馈机制,用户很容易误以为程序卡死或者失去耐心。这时候,tqdm 就派上用场了!

tqdm(读作 “taqadum”,阿拉伯语意为“进展”)是一个快速、可扩展且美观的进度条库,能够轻松地为你的 Python 循环添加进度提示。它轻量、高效,并且兼容性极强。

一、安装 tqdm

tqdm 是一个第三方库,可以通过 pip 轻松安装:

pip install tqdm

如果你使用的是 Jupyter Notebook,建议同时安装 ipywidgets 以获得更好的交互体验:

pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension

二、基本用法:一行代码添加进度条

最简单的用法就是将 tqdm 包裹在任何可迭代对象外面:

from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.01)  # 模拟耗时操作

运行后你会看到类似这样的输出:

100%|██████████| 100/100 [00:01<00:00, 95.23it/s]

其中包含:

  • 进度百分比
  • 可视化进度条
  • 已完成 / 总数
  • 已用时间 < 预计剩余时间
  • 每秒迭代次数(iterations per second)

三、常用参数详解

tqdm() 支持多个参数来自定义进度条行为:

参数说明
desc进度条前缀描述
total总迭代次数(当迭代器长度未知时需手动指定)
unit迭代单位(如 ‘file’, ‘image’)
unit_scale自动缩放单位(如 KB/MB)
leave循环结束后是否保留进度条(默认 True)
ncols进度条宽度(字符数)
colour进度条颜色(如 ‘green’, ‘#ff0000’)

示例:带描述和自定义单位

from tqdm import tqdm
import time

for i in tqdm(range(50), desc="Processing", unit="item", colour="green"):
    time.sleep(0.05)

输出效果:

Processing: 100%|██████████| 50/50 [00:02<00:00, 20.12item/s]

四、处理嵌套循环

tqdm 支持多层嵌套进度条,只需分别包裹每一层:

from tqdm import tqdm
import time

for i in tqdm(range(3), desc="Outer"):
    for j in tqdm(range(100), desc="Inner", leave=False):
        time.sleep(0.01)
Outer:   0%|          | 0/3 [00:00<?, ?it/s]
Inner:   0%|          | 0/100 [00:00<?, ?it/s]
Inner:  10%|█         | 10/100 [00:00<00:00, 94.52it/s]
Inner:  20%|██        | 20/100 [00:00<00:00, 94.96it/s]
Inner:  30%|███       | 30/100 [00:00<00:00, 94.97it/s]
Inner:  40%|████      | 40/100 [00:00<00:00, 94.88it/s]
Inner:  50%|█████     | 50/100 [00:00<00:00, 94.48it/s]
Inner:  60%|██████    | 60/100 [00:00<00:00, 94.40it/s]
Inner:  70%|███████   | 70/100 [00:00<00:00, 93.65it/s]
Inner:  80%|████████  | 80/100 [00:00<00:00, 94.03it/s]
Inner:  90%|█████████ | 90/100 [00:00<00:00, 93.76it/s]
Inner: 100%|██████████| 100/100 [00:01<00:00, 93.81it/s]
Outer:  33%|███▎      | 1/3 [00:01<00:02,  1.06s/it]
Inner:   0%|          | 0/100 [00:00<?, ?it/s]
Inner:  10%|█         | 10/100 [00:00<00:00, 92.40it/s]
Inner:  20%|██        | 20/100 [00:00<00:00, 92.28it/s]
Inner:  30%|███       | 30/100 [00:00<00:00, 92.16it/s]
Inner:  40%|████      | 40/100 [00:00<00:00, 92.55it/s]
Inner:  50%|█████     | 50/100 [00:00<00:00, 92.10it/s]
Inner:  60%|██████    | 60/100 [00:00<00:00, 92.32it/s]
Inner:  70%|███████   | 70/100 [00:00<00:00, 93.00it/s]
Inner:  80%|████████  | 80/100 [00:00<00:00, 93.31it/s]
Inner:  90%|█████████ | 90/100 [00:00<00:00, 93.02it/s]
Inner: 100%|██████████| 100/100 [00:01<00:00, 93.08it/s]
Outer:  67%|██████▋   | 2/3 [00:02<00:01,  1.07s/it]
Inner:   0%|          | 0/100 [00:00<?, ?it/s]
Inner:  10%|█         | 10/100 [00:00<00:00, 91.33it/s]
Inner:  20%|██        | 20/100 [00:00<00:00, 91.54it/s]
Inner:  30%|███       | 30/100 [00:00<00:00, 92.87it/s]
Inner:  40%|████      | 40/100 [00:00<00:00, 92.91it/s]
Inner:  50%|█████     | 50/100 [00:00<00:00, 93.23it/s]
Inner:  60%|██████    | 60/100 [00:00<00:00, 92.99it/s]
Inner:  70%|███████   | 70/100 [00:00<00:00, 92.75it/s]
Inner:  80%|████████  | 80/100 [00:00<00:00, 93.23it/s]
Inner:  90%|█████████ | 90/100 [00:00<00:00, 92.88it/s]
Inner: 100%|██████████| 100/100 [00:01<00:00, 93.16it/s]
Outer: 100%|██████████| 3/3 [00:03<00:00,  1.07s/it]

注意:内层循环通常设置 leave=False,避免屏幕被大量历史进度条刷屏。

五、手动控制进度

有时你无法使用 for 循环(比如在 while 中),这时可以使用 tqdm 的手动更新方式:

from tqdm import tqdm
import time

pbar = tqdm(total=100, desc="Manual")
current = 0
while current < 100:
    time.sleep(0.02)
    increment = min(10, 100 - current)
    pbar.update(increment)
    current += increment
pbar.close()
Manual: 100%|██████████| 100/100 [00:00<00:00, 488.25it/s]

关键方法:

  • pbar.update(n):前进 n 步
  • pbar.close():关闭进度条(释放资源)

六、与 pandas 集成

tqdm 还能与 pandas 无缝集成,用于显示 apply()groupby() 等操作的进度:

import pandas as pd
from tqdm import tqdm

# 启用 pandas 支持
tqdm.pandas(desc="Pandas Apply")

df = pd.DataFrame({'x': range(1000)})
df['x_squared'] = df['x'].progress_apply(lambda x: x ** 2)
Pandas Apply: 100%|██████████| 1000/1000 [00:00<00:00, 602803.10it/s]

七、Jupyter Notebook 中的特殊支持

在 Jupyter 中,推荐使用 tqdm.notebook.tqdm,它会渲染出更美观的 HTML 进度条:

from tqdm.notebook import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.01)

效果是带有颜色和动态更新的图形化进度条,体验更佳。

八、性能影响

tqdm 的设计非常高效,默认每秒最多刷新 10 次(可通过 minitersmininterval 调整),对程序性能影响微乎其微。即使在高频循环中,也可以放心使用。

九、小贴士

  • 如果你在服务器或无终端环境中运行(如某些 CI/CD 环境),tqdm 会自动检测并禁用进度条,避免输出混乱。
  • 可通过 disable=True 强制关闭进度条(便于调试或日志记录)。
  • 使用 logging 时,建议将 tqdm 输出重定向到 sys.stderr(默认行为),避免干扰日志流。

结语

tqdm 是 Python 开发者提升用户体验和调试效率的利器。无论是训练深度学习模型、处理大规模数据,还是简单的脚本任务,只需一行代码,就能让你的程序“看得见进度”。

记住:好的工具不在于复杂,而在于恰到好处的优雅。

赶快在你的下一个项目中试试 tqdm 吧!

以上就是Python进度条神器tqdm的使用指南的详细内容,更多关于Python进度条神器tqdm的资料请关注脚本之家其它相关文章!

相关文章

  • Python的Dict对象源码分析

    Python的Dict对象源码分析

    这篇文章主要介绍了Python的Dict对象源码分析,PyDictObject即字典对象,类似于C++ STL中的map,但STL中以红黑树实现,Python中dict以hash表(散列表)实现,需要的朋友可以参考下
    2023-08-08
  • python tkinter GUI绘制,以及点击更新显示图片代码

    python tkinter GUI绘制,以及点击更新显示图片代码

    这篇文章主要介绍了python tkinter GUI绘制,以及点击更新显示图片代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 详解Python中的__new__、__init__、__call__三个特殊方法

    详解Python中的__new__、__init__、__call__三个特殊方法

    用双下划线包围的特殊方法在Python中又被成为魔术方法,类似于C++等语言中的构造函数,这里我们就来详解Python中的__new__、__init__、__call__三个特殊方法:
    2016-06-06
  • Python3之不使用第三方变量,实现交换两个变量的值

    Python3之不使用第三方变量,实现交换两个变量的值

    今天小编就为大家分享一篇Python3之不使用第三方变量,实现交换两个变量的值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python魔法方法-属性转换和类的表示详解

    python魔法方法-属性转换和类的表示详解

    下面小编就为大家带来一篇python魔法方法-属性转换和类的表示详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Pycharm 设置默认解释器路径和编码格式的操作

    Pycharm 设置默认解释器路径和编码格式的操作

    这篇文章主要介绍了Pycharm 设置默认解释器路径和编码格式的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Python 字符串操作详情

    Python 字符串操作详情

    这篇文章主要介绍了Python 字符串操作,所谓字符串,就是由0个或者多个字符组成的有限序列,字符串的字符可以是特殊符号、英文字母、中文字符、日文的平假名或片假名、希腊字母、Emoji字符等等。下面我们大家一起来学习文章详细内容吧
    2021-11-11
  • python多维数组分位数的求取方式

    python多维数组分位数的求取方式

    这篇文章主要介绍了python多维数组分位数的求取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python深度优先搜索和广度优先搜索

    python深度优先搜索和广度优先搜索

    这篇文章主要介绍了python实现图的深度优先搜索和广度优先搜索相关知识点,对此有兴趣的朋友学习下。
    2018-02-02
  • 决策树的python实现方法

    决策树的python实现方法

    这篇文章主要介绍了决策树的python实现方法,详细分析了决策树的优缺点及算法思想并以完整实例形式讲述了Python实现决策树的方法,具有一定的借鉴价值,需要的朋友可以参考下
    2014-11-11

最新评论