首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python - 进度条神器 tqdm 用法

Python - 进度条神器 tqdm 用法

作者头像
为为为什么
发布2022-08-04 15:10:29
发布2022-08-04 15:10:29
2.4K00
代码可运行
举报
文章被收录于专栏:又见苍岚又见苍岚
运行总次数:0
代码可运行

程序运行过程中进度条显示特别重要,Python中使用tqdm库作为进度条操作工具,本文简要介绍tqdm常用功能。

背景

tqdm源自阿拉伯语 taqaddum,意思是进程( “progress”); 也是西班牙语中 “I love you so much” (te quiero demasiado)的缩写(这个是碰了巧了)

  • 该模块的作用就是通过装饰tqdm(iterable)任何可迭代的对象,使代码中的循环(loop)在运行过程中为用户展示进度条。
  • 盗了官网的图直观展示一下效果

准备工作

引入包
代码语言:javascript
代码运行次数:0
运行
复制
from tqdm import tqdm

生成tqdm对象

tqdm类的构造函数:

代码语言:javascript
代码运行次数:0
运行
复制
__init__(iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=None, lock_args=None, nrows=None, colour=None, gui=False, **kwargs)

参数很复杂,这里介绍几个常用参数和方法,详细情况参考官网文档

  • iterable: 最常用的参数,表示使用这个迭代对象来初始化tqdm对象,如果手动更新进度条的话该参数可以为None
  • desc: 进度条的描述信息
  • total: 进度条总格子数量
  • miniters: int, optional。迭代过程中进度显示的最小更新间隔。
  • unit : str, optional。定义每个迭代的单元。默认为"it",即每个迭代,在下载或解压时,设为"B",代表每个“字节”。
  • unit_scale: bool or int or float, optional。默认为False,如果设置为1或者True,会自动根据国际单位制进行转换 (kilo, mega, etc.) 。比如,在下载进度条的例子中,如果为False,数据大小是按照字节显示,设为True之后转换为Kb、Mb。

使用方法

自动控制进度
  • tqdm() 直接包装在任意迭代器上:
代码语言:javascript
代码运行次数:0
运行
复制
from tqdm import tqdm
for i in tqdm(range(10000)):
    pass

>> 100%|██████████████████| 10000/10000 [00:00<00:00, 1248304.76it/s]

  • 加入描述:
代码语言:javascript
代码运行次数:0
运行
复制
from tqdm import tqdm
for i in tqdm(range(10000), desc='test str:'):
    pass

>> test str:: 100%|█████████████████| 10000/10000 [00:00<00:00, 1666257.75it/s] 

  • trange(i) 是对tqdm(range(i)) 特殊优化过的实例:
代码语言:javascript
代码运行次数:0
运行
复制
from tqdm import trange
for i in trange(10000):
    pass

>> 100%|██████████████████| 10000/10000 [00:00<00:00, 1191844.79it/s]

  • 如果要精细控制tqdm对象,需要提前生成对象,并在循环中加以控制:

使用外部对象可以直接建立对象,此时在循环之外需要关闭该对象:

代码语言:javascript
代码运行次数:0
运行
复制
from tqdm import tqdm
pbar = tqdm(range(10000))
for i in pbar:
    pbar.set_description(str(i))
    pass
pbar.close()

>> 9999: 100%|█████████████████████████| 10000/10000 [00:02<00:00, 4677.99it/s] 

也可以使用with功能,在循环体之外由编译器自动结束其生命周期:

代码语言:javascript
代码运行次数:0
运行
复制
from tqdm import tqdm
with tqdm(range(10000)) as pbar:
    for i in pbar:
        pbar.set_description(str(i))
        pass
    
>> 9999: 100%|█████████████████████████| 10000/10000 [00:02<00:00, 4659.45it/s] 

手动控制进度
  • 手动运行时tqdm对象不需要迭代器作为初始化参数,但需要指定最大长度total的值:
代码语言:javascript
代码运行次数:0
运行
复制
from tqdm import tqdm
with tqdm(total=10000) as pbar:
    for i in range(10000):
        pbar.update(1)
        
>> 100%|████████████████████████████| 10000/10000 [00:00<00:00, 99888.16it/s] 

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年1月9日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 准备工作
    • 引入包
    • 生成tqdm对象
  • 使用方法
    • 自动控制进度
    • 手动控制进度
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档