当前位置: 首页 > 科技观察

给Python添加进度条-为小白精制的Tqdm实例!

时间:2023-03-21 12:00:59 科技观察

本文转载自微信公众号“吹笛蛋窝”,作者吹笛蛋。转载本文请联系派珀蛋巢公众号。假设我们有一个循环:foriinrange(100):do_something()#Dosomethinghere假设do_something()很慢,运行时间不稳定。当我们跑步时,我们不知道自己跑到哪里去了。我们引入了一个进度条。fromtqdmimporttrangeforiintrange(100):do_something()输出5%|██▌如上,我们可以实时查看进度。安装这个库不是python自带的库,直接用pip安装即可。pipinstalltqdm看看我的实验环境。?python--versionPython3.7.0>>>tqdm.__version__'4.59.0'介绍例子说实话,官方文档[1]写的不是很好。对于range(),我们可以在tqdm中将其改为trange()。实际上,trange(5)等同于tqdm(range(5))。>>>a=['a','b','c']*10000>>>fromtqdmimporttqdm>>>foriintqdm(a):...通过...100%|███████████|30000/30000[00:00>>在tqdm(a)中使用fori和在a中使用fori之间没有逻辑上的区别,但前者使控制台有一个额外的进度条。自定义进度条其实我们也可以“手动”操作进度条。特别是当我们的进步不完全依赖于可迭代变量时。假设我们有一个任务如下。importrandomimporttimeclassTask:def__init__(self)->None:self.jobs=int(1e3)@propertydefjob_done(self)->bool:returnsself.jobs<=0defdo_job(self)->int:time.sleep(1)job_minus=random。randint(1,50)self.jobs=max(0,self.jobs-job_minus)returnjob_minus我们总共有1e3=1000个任务要做,但是这些任务不是一次一个做,而是可能每次都做[1,50)任意数量的作业。所以我们不能简单的让do_job跑1000次,因为每个do_job的效率是不一样的。此时我们自定义我们的进度条。fromtqdmimporttqdmtask:Task=Task()info={'efficiency':None}withtqdm(total=task.jobs,desc='Doingjobs')ast:whilenotask.job_done:job_minus=task.do_job()info['efficiency']=job_minust.update(job_minus)t.set_postfix(info)如上,我们声明了一个tqdm对象:这个对象的总计数就是我们的总工作量total=task.jobs进度条的前缀是'Doingjobs'每次刷新Progress,我们进度条的增量是t.update(job_minus)我们的进度条后缀输出信息info['efficiency']=job_minus看效果。?python.\example.pyDoingjobs:9%|██▏|94/1000[00:03<00:28,31.73it/s,efficiency=30]动画如下。摘要通过示例讨论tqdm进度条的使用。