如何在Python的tqdm进度条中展示当前迭代项,有没有更简洁的实现方式?
tqdm 官方暂时没有内置你预期的 postfix="{item}" 这类自动输出迭代项字符串的参数,不过可以通过简易封装实现几乎一致的简洁调用效果。
推荐实现方案:封装通用工具函数
只需提前封装一次,后续所有需要展示当前迭代项的场景都可以和原生 tqdm 一样简洁调用:
from tqdm import tqdm import time def tqdm_with_item(iterable, **tqdm_kwargs): progress = tqdm(iterable, **tqdm_kwargs) for item in progress: # 自动调用迭代项的 __str__ 方法作为后缀 progress.set_postfix_str(str(item)) yield item # 调用方式和你理想的写法几乎无差别 animals = ["cat", "dog", "bird", "fish", "insect"] for animal in tqdm_with_item(animals): time.sleep(1)
运行后输出和你之前实现的效果完全一致:
40%|████ | 2/5 [00:02<00:04, 1.46s/it, bird]
该封装支持传入所有原生 tqdm 的参数(比如 desc、total、ncols 等),和原生用法完全兼容。
临时使用的极简写法
如果不想单独封装函数,也可以用生成器表达式实现一行简写,适合临时脚本使用:
for animal in (p.set_postfix_str(str(a)) or a for a, p in zip(animals, tqdm(animals))): time.sleep(1)
该写法不需要额外声明变量,但是可读性较低,不推荐在工程代码中使用。
内容的提问来源于stack exchange,提问作者DustByte
相关产品推荐
相关产品推荐

