tqdm库学习之tqdm模块

tqdm库学习之tqdm模块

一、简介

tqdm 是一个 Python 库,用于在循环或迭代的过程中显示进度条,帮助开发者轻松监控代码的执行进度。tqdm.tqdm 是该库的核心模块,提供了简单易用的进度条功能。

二、语法和参数

语法
from tqdm import tqdm

for item in tqdm(iterable, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=False, 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=False, lock_args=None, nrows=None, colour=None):
    # 你的循环代码
参数
  • iterable: 可迭代对象,如列表、元组等。
  • desc: 字符串,用于描述进度条前缀的文本。
  • total: 整数,表示总迭代次数。如果未指定,将尝试从 iterable 中自动推断。
  • leave: 布尔值,是否在完成后保留进度条。
  • file: 文件对象,表示进度条输出的目标(默认为 sys.stderr)。
  • ncols: 整数,设置进度条的宽度。如果为 None,将自动调整。
  • mininterval: 浮点数,更新进度条之间的最小时间间隔(以秒为单位)。
  • maxinterval: 浮点数,更新进度条之间的最大时间间隔(以秒为单位)。
  • miniters: 整数,最小迭代次数,达到此次数后更新进度条。
  • ascii: 布尔值或字符串,进度条是否使用 ASCII 字符。
  • disable: 布尔值,是否禁用进度条。
  • unit: 字符串,设置进度条的单位。
  • unit_scale: 布尔值或数字,是否自动缩放单位。
  • dynamic_ncols: 布尔值,是否动态调整进度条宽度。
  • smoothing: 浮点数,平滑因子,用于计算速度的指数加权平均值。
  • bar_format: 字符串,自定义进度条的显示格式。
  • initial: 整数,设置进度条的初始位置。
  • position: 整数,多重进度条时的指定位置。
  • postfix: 字典或字符串,用于在进度条末尾添加的额外信息。
  • unit_divisor: 数字,缩放单位时的除数。
  • write_bytes: 布尔值,如果设置为 True,则进度条将以字节形式输出。
  • lock_args: 元组,用于多进程的锁定参数。
  • nrows: 整数,指定进度条的最大行数。
  • colour: 字符串,指定进度条的颜色(仅在支持颜色的环境中有效)。
返回值

tqdm 对象,表示进度条,可以用于手动控制更新。

三、实例

3.1 简单进度条
from tqdm import tqdm
import time

for i in tqdm(range(10)):
    time.sleep(0.1)

输出:

100%|███████████| 10/10 [00:01<00:00,  9.92it/s]
3.2 自定义描述和单位
from tqdm import tqdm
import time

for i in tqdm(range(10), desc="Processing", unit="iteration"):
    time.sleep(0.1)

输出:

Processing: 100%|████████| 10/10 [00:01<00:00,  9.93iteration/s]
3.3 动态更新信息
from tqdm import tqdm
import time

with tqdm(total=100, postfix={'status': 'Initializing'}) as pbar:
    for i in range(10):
        time.sleep(0.1)
        pbar.update(10)  # 更新进度条,步长为10
        pbar.set_postfix({'status': f'Step {i+1}/10'})  # 设置进度条的后缀
        pbar.set_description(f"Processing {i+1}")

pbar.set_postfix({'status': 'Complete'})
pbar.close()

输出:

Processing 10: 100%|██████████████████| 100/100 [00:01<00:00, 98.57it/s, status=Step 10/10]
3.4 自定义样式
from tqdm import tqdm
import time

total = 50
for i in tqdm(range(total), desc="Processing", bar_format="{desc}: {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}{postfix}]"):
    time.sleep(0.1)

输出:

Processing: 50/50 [00:05<00:00,  9.92it/s]
3.5 多进度条
from tqdm import tqdm
import time

with tqdm(total=100, desc="First") as pbar1, tqdm(total=100, desc="Second") as pbar2:
    for i in range(100):
        time.sleep(0.05)
        pbar1.update(1)
        pbar2.update(1)

这在同时处理多个任务时相当有用。

输出:

Second: 100%|████████████| 100/100 [00:05<00:00, 19.70it/s]
First: 100%|████████████| 100/100 [00:05<00:00, 19.70it/s] 
3.5 嵌套进度条
from tqdm import tqdm
import time

outer = tqdm(total=100, desc="Outer Loop")
for i in range(100):
    inner = tqdm(total=100, desc="Inner Loop", leave=False)
    for j in range(100):
        time.sleep(0.01)
        inner.update(1)  # 内部进度条更新1
    outer.update(1)  # 外部进度条更新1
    inner.close()  # 内部进度条关闭(因为已经完成)
outer.close()  # 外部进度条关闭(因为已经完成

输出

Outer Loop:  30%|██████████████| 30/100 [00:31<01:12,  1.04s/it]
Inner Loop:  30%|██████████████| 30/100 [00:00<00:00, 94.66it/s] 
3.6 更新频率控制
from tqdm import tqdm
import time

total = 50
for i in tqdm(range(total), desc="Processing", mininterval=2):
    time.sleep(0.1)
  • mininterval:进度条呈现的刷新间隔,2秒刷新一次进度条,避免因为更新过快来不及观看。

    注意:这里的2秒只是刷新显示效果,在上面的代码中进度条更新依然是以0.1为时间单位进行更新的。

输出

Processing: 100%|████████████| 50/50 [00:05<00:00,  9.97it/s]

四、注意事项

  1. tqdm 在 Jupyter Notebook 中使用时,可以通过导入 tqdm.notebook 模块来启用更好看的进度条。
  2. 使用 disable=True 参数可以禁用进度条显示,在不需要进度条的情况下提高性能。
  3. 进度条输出的位置可以通过 position 参数进行调整,特别是在多线程或多进程的环境中。
  4. 还有一些其他的库也可以完成相应的功能,如clickrich等库,读者可自行探索。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值