Python 官方文档:入门教程 => 点击学习
目录1. tqdm的介绍1.1 tqdm导入2. tqdm.tqdm()对可迭代对象进行封装2.1 语法2.2 例子2.3 带有参数的tqdm.tqdm()2.3.1 例子12.3.
有时候在使用python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。
tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持windows、linux、Mac等系统,支持①循环处理、②多进程、③递归处理、还可以结合Linux的命令来查看处理情况,等进度展示。
# 方法1
import tqdm
# 方法2
from tqdm import tqdm
建议使用方法1,因为方法1导入的是一个lib,而方法2导入的是
tqdm.tqdm
方法
使用方法2导入就没办法使用tqdm.trange()
等方法了
# 方法1
for i in tqdm.tqdm(可迭代对象):
pass
# 方法2
for idx, i in enumerate(tqdm.tqdm(可迭代对象)):
pass
对于可以迭代的对象都可以使用tqdm进行封装实现可视化进度,使用起来非常方便。
import tqdm
import time
# 定义一个可迭代对象
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 正常的遍历(没有进度条)
for idx, element in enumerate(a):
print(f"No.{idx}: {element}")
# 使用tqdm对可迭代对象进行包装,实现进度条可视化
for idx, element in enumerate(tqdm.tqdm(a)):
time.sleep(0.5)
print(f"No.{idx}: {element}")
结果如下:
Q:为什么结果会一直新建一行?
A:这是因为每次的print内容都不一样,为了能够显示新的内容,所以会这样。
我们看下面这个程序,它因为没有控制台输出,所以进度条就很正常。
Q:进度条可以加一些其他信息吗?
A:当然可以,需要对tqdm进行一些参数调整
@staticmethod
def fORMat_meter(n, total, elapsed, ncols=None, prefix='', ascii=False, unit='it',
unit_scale=False, rate=None, bar_format=None, postfix=None,
unit_divisor=1000, initial=0, colour=None, **extra_kwargs):
import tqdm
import time
d = {'loss':0.2,'learn':0.8}
"""
desc设置名称
ncols设置进度条长度 -> 建议设置在100以内
postfix以字典形式传入详细信息
"""
for i in tqdm.tqdm(range(50),desc='名称',ncols=100,postfix=d):
time.sleep(0.1)
pass
其中
xxxit/s
表示每秒迭代的次数
import tqdm
import time
iter_object = range(10, 21)
pbar = tqdm.tqdm(iter_object,
total=len(iter_object),
leave=True,
ncols=100,
unit="个",
unit_scale=False,
colour="red")
for idx, element in enumerate(pbar):
time.sleep(0.5)
pbar.set_description(f"No.{idx}")
pbar.set_postfix({"正在处理的元素为": element})
Q:我就是想print一些东西,可以吗?
A:当然可以,tqdm提供了两个个方法:
这两个方法就类似于print,可以在进度条中显示一些变动的信息
import tqdm
import time
# 在使用set_description时一般会创建一个tqdm.tqdm()对象
pbar = tqdm.tqdm(["a", "b", "c", "d", "e", "f", "g"])
for idx, element in enumerate(pbar):
time.sleep(1)
pbar.set_description(f"No.{idx}: {element}")
import tqdm
import time
import random
epochs = 150
# 在使用set_description()和set_postfix()时一般会创建一个tqdm.tqdm()对象
pbar = tqdm.tqdm(range(epochs), ncols=100) # ncols设置进度条显示的字符长度,小了就显示不全了
for idx, element in enumerate(pbar):
time.sleep(0.01)
pbar.set_description(f"Epoch {idx}/{epochs}")
pbar.set_postfix({"class": element}, loss=random.random(), cost_time = random.randrange(0, 100))
set_description
和set_postfix
都用的kwargs传参,所以我们可以:
除了tqdm.tqdm(range(xxx))
这样的写法外,tqdm也提供了类似的方法,即tqdm.trange(xxx)
,例子如下:
import tqdm
import time
pbar = tqdm.trange(300, 400, 1)
for idx, element in enumerate(pbar):
time.sleep(0.01)
pbar.set_description(f"No.{idx} -> {element}")
有时候我们不仅仅是通过一个for训练来更新进度条,我们也希望在做完某些操作后更新一次进度条,代码如下:
import tqdm
import time
with tqdm.tqdm(total=10) as bar: # total为进度条总的迭代次数
# 操作1
time.sleep(1)
# 更新进度条
bar.update(1) # bar.update()里面的数表示更新的次数,和optimizer.step方法类似
# 操作2
time.sleep(2)
# 更新进度条
bar.update(3)
# 操作3
time.sleep(1)
# 更新进度条
bar.update(6) # 建议不要超过total
到此这篇关于Python中tqdm使用的文章就介绍到这了,更多相关tqdm使用例子内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Python中tqdm的使用和例子
本文链接: https://lsjlt.com/news/120562.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0