前言:在Python开发中,我们经常需要使用进度条来展示任务进行的进度到哪里了,特别是在机器学习与深度学习框架里面,tqdm包是一个非常简单但是功能强大的进度条处理工具,一起来看看它的一些基本用法吧!
一、tqdm的安装与导入
1.1 安装
pip install tqdm
1.2 导入
from tqdm import tqdm
后面的这个tqdm是一个类,前面的tqdm是一个package,当然这个包里面还有其他的方法和类了。
二、tqdm的定义速览
由于tqdm本质上是一个类,我们来看一看这一个类的构造函数,当然里面还包含很多其他的方法,这里就不再一个一个写出来了,因为比较多。
class tqdm(Comparable):def __init__(self, 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, gui=False, **kwargs):
由于tqdm很多日常的使用,通过设置构造函数就可以了,而构造函数里面的参数又比较多,我会一个一个来加以说明。
构造函数参数:iterable : iterable, optional第一个参数是一个可迭代对象,比如迭代器、生成器、列表等等,实现可迭代的进度条。desc : str, optional字符串,用于进度条的前缀描述total : int, optional预期的迭代数目,默认为None,一般情况下我们习惯用len(iterable)即可leave : bool, optional保留进度条存在的痕迹,简单来说就是会把进度条的最终形态保留下来,默认为Truefile : io.TextIOWrapper or io.StringIO, optional指定消息的输出,默认是sys.stderrncols : int, optional整个输出消息的宽度。如果指定,动态调整的进度停留在这个边界。如果未指定,尝试使用环境的宽度。如果为0,将不打印任何东西(只统计)。mininterval : float, optional最小进度更新间隔,以秒为单位(默认值:0.1),即表示0.1秒更新一下进度maxinterval : float, optional最大进度更新间隔,以秒为单位(默认值:10)。miniters : int, optionalMinimum progress update interval, in iterations.If specified, will set mininterval to 0.最小进度更新周期ascii : bool, optional如果不设置,默认为unicode编码disable : bool, optional是否禁用整个进度条包装(如果为True,进度条不显示),默认为False,即显示进度条等等,参数很多,可以参考官方文档返回值Returnsout : decorated iterator.返回为一个被包装之后的迭代器
三、tqdm的一些简单的例子
3.1 实例一
pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:pbar.set_description("Now Processing %s" % char) 这里的这个方法就相当于给tqdm类的构造函数添加一个 desc 参数time.sleep(0.2)
需要注意两个问题:
(1)由于每个任务的耗时不同,而tqdm默认的进度更新时间是0.1秒更新一次进度,所以上面的运行结果可能跟想象的有点不一样,这里就不展示了,可以自己运行看一下效果
(2)虽然tqdm包装之后,返回的是一个新的迭代器,但是需要注意的是,其实迭代的每一个元素还是原来迭代器中的元素,也就是上面的char元素还是a、b、c、d这四个元素。
3.2 实例二
from tqdm import tqdm,trangefor i in trange(100): # trange(i)完全等价于tqdm(range(i)):time.sleep(0.01)
trange(i)完全等价于tqdm(range(i)):
3.3 实例三
from tqdm import tqdm,trange
import timefor i in trange(4,desc="循环1"):for j in trange(100,desc="循环2"):time.sleep(0.01)
tqdm还支持多层嵌套。
3.4 拓展
tqdm功能很多,还支持手动更新进度,进度更新到百分之多少后暂停进度,tqdm还可以作为脚本来运行等等,所以,这里就不再一一展示了,明白tqdm常见的用法就可以了。