您现在的位置是:首页 >技术杂谈 >tqdm使用指南网站首页技术杂谈

tqdm使用指南

yzy_1996 2024-08-24 12:01:03
简介tqdm使用指南

tqdm 使用指南

官方网站:https://tqdm.github.io/

主要是能够显示迭代训练的进度条,先来看基本功能

from tqdm import tqdm

for char in tqdm(["a", "b", "c", "d"]):
    pass

因为 tqdm() 里的对象是一个 list,是一个可迭代对象,因此上述操作等价于

from tqdm import tqdm

for char in ["a", "b", "c", "d"]:
    pass

所以这里先建立一种感觉,就是你第一遍还是写正常的迭代循环代码,然后改成tqdm进度条形式。

接着我们看一些更加复杂的例子

# 有一个等价 range 的 trange

from tqdm import trange

# 等同于 for i in tqdm(range(10)):
for i in trange(10):
    pass

如果要给进度条加一点说明

from tqdm import tqdm
from time import sleep

pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
    sleep(0.25)
    pbar.set_description("Processing %s" % char) # 出现在最前面

让上面代码更加优雅一点呢,似乎也并没有

from tqdm import tqdm
from time import sleep

with tqdm(["a", "b", "c", "d"]) as pbar:
    for char in pbar:
        sleep(0.25)
        pbar.set_description("Processing %s" % char) # 出现在最前面

所以这里引入了一个 with … as … 结构,在python里实际是为了简化自动清理流程的,例如读取文件时候的open close

而这里如果 tqdm 内部是一个可迭代对象,则是会自动用完释放掉的,既然如此,那也就对应着没有自动释放掉的方法

from tqdm import tqdm
from time import sleep

pbar = tqdm(total=100)
for i in range(10):
    sleep(0.1)
    pbar.update(10)
pbar.close()

上面代码的含义是,意思是每隔10步更新一次,每次更新10,所以进度条就是10+10+10… 这里替换为with结构的话就成了

from tqdm import tqdm
from time import sleep

with tqdm(total=100) as pbar:
    for i in range(10):
        sleep(0.1)
        pbar.update(10)

再回去看例子2,到底有没有更加优雅的方式呢

from tqdm import tqdm
from time import sleep

for char in (pbar := tqdm(["a", "b", "c", "d"])):
    sleep(0.25)
    pbar.set_description(f"Processing {char}") # 出现在最前面

利用了海象运算符,可以在 if 语句本身中声明并分配值

这也是最推荐的一种使用样式!!!

进阶细节

自定义初始值和总值

from tqdm import trange
from time import sleep

epoch = 0
with trange(epoch, 10, initial=epoch, total=10) as pbar:
    for epoch in pbar:
        sleep(1)

trange(start, end, initial, total)

tqdm 后依旧是一个可迭代对象,因此可以继续放心搭配 enumerate 使用

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。