当前位置: 首页 > 后端技术 > Python

给Python添加进度条-小白tqdm精炼实例!

时间:2023-03-25 19:37:02 Python

Python添加进度条|小白tqdm精修范例!假设我们有一个循环:foriinrange(100):do_something()#Dosomethinghere假设do_something()很慢,而且运行时间不稳定,当我们运行的时候,我们不知道我们跑到哪里去了。我们引入了一个进度条。fromtqdmimporttrangeforiintrange(100):do_something()输出5%|██▌|5/100[00:05<01:35,1.01s/it]如上,我们可以实时查看进度。安装这个库不是python自带的库,直接用pip安装即可。pipinstalltqdm看看我的实验环境。?python--versionPython3.7.0>>>tqdm.__version__'4.59.0'入门示例说实话,官方文档写的不是很好。对于range(),我们可以在tqdm中将其改为trange()。实际上,trange(5)等同于tqdm(range(5))。所以不难看出用tqdm包裹tqdm(iterableobject)可以自动为我们创建一个进度条。>>>a=['a','b','c']*10000>>>fromtqdmimporttqdm>>>foriintqdm(a):...pass...100%|███████████|30000/30000[00:00>>在tqdm(a)中使用fori和在a中使用fori没有逻辑上的区别,但是前者让control多了一个进度条。自定义进度条其实我们也可以“手动”操作进度条。特别是当我们的进步不完全依赖于可迭代变量时。假设我们有一个任务如下。importrandomimporttimeclassTask:def__init__(self)->None:self.jobs=int(1e3)@propertydefjob_done(self)->bool:returnself.jobs<=0defdo_job(self)->int:时间.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:whilenottask.job_done:job_minus=task.do_job()info['efficiency']=job_minust.update(job_minus)t.set_postfix(info)如上,我们声明了一个tqdm对象:这个对象的总数就是我们的总工作量total=task.jobsprogressbar前缀是‘做作业’每次刷新进度,我们进度条的增量是t.update(job_minus),我们进度条的后缀输出信息是info['efficiency']=job_minus,看看效果。?python.\example.pyDoingjobs:9%|██▏|94/1000[00:03<00:28,31.73it/s,efficiency=30]动画如下。摘要通过示例讨论tqdm进度条的使用。我是小派,老手记得点赞关注哦!微信PiperLHJ。