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

给 Python 添加进度条 | 给小白的 tqdm 精炼实例!,第1张

概述给Python添加进度条|给小白的tqdm精炼实例!假设我们有一个循环:foriinrange(100):do_something()#这里做某些事假设do_something()很慢,且运行时间不稳定,当我们运行时,我们并不知道运行到哪里了。我们引入一个进度条。fromtqdmimporttrangeforiintra 给 Python 添加进度条 | 给小白的 tqdm 精炼实例!

假设我们有一个循环:

for i in range(100):    do_something()  # 这里做某些事

假设 do_something() 很慢,且运行时间不稳定,当我们运行时,我们并不知道运行到哪里了。

我们引入一个进度条。

from tqdm import trangefor i in trange(100):    do_something()输出  5%|██▌                                                 | 5/100 [00:05<01:35,  1.01s/it]

如上,我们就可用实时查看进度。

安装

这个库并不是 python 自带的库,使用 pip 安装就可。

pip install tqdm

来看看我的实验环境。

❯ python --versionPython 3.7.0>>> tqdm.__version__'4.59.0'
入门实例

说实在的,官方文档写得并不是很好。

对于 range() ,我们把其改为 tqdm 中的 trange() 就可以。

其实, trange(5) 相当于 tqdm(range(5))

所以不难看出,用 tqdm 包裹 tqdm(可迭代的对象) 就可以自动为我们建立进度条。

>>> a = ['a', 'b', 'c'] * 10000>>> from tqdm import tqdm>>> for i in tqdm(a):...     pass...100%|███████████| 30000/30000 [00:00<?, ?it/s]>>>

使用 for i in tqdm(a)for i in a 逻辑上没有区别,但是前者让控制台多出了一个进度条。

自定义进度条

其实,我们还可用「手把手地」 *** 作进度条。尤其是当我们的进度并不是单纯的依靠可迭代变量时。

假设我们有个任务如下。

import randomimport timeclass Task:    def __init__(self) -> None:        self.jobs = int(1e3)    @property    def job_done(self) -> bool:        return self.jobs <= 0    def do_job(self) -> int:        time.sleep(1)        job_minus = random.randint(1, 50)        self.jobs = max(0, self.jobs - job_minus)        return job_minus

我们总共有 1e3 = 1000 个任务要做,但是这些任务并不是每次做一个,而是每次可能做 [1, 50) 个中的任意数量的工作。

所以我们不可以单纯让 do_job 运行 1000 次,因为每次 do_job 的效率不同。

这时我们定制我们的进度条。

from tqdm import tqdmtask: Task = Task()info = { 'efficIEncy': None }with tqdm(    total=task.jobs, desc='Doing jobs') as t:    while not task.job_done:        job_minus = task.do_job()        info['efficIEncy'] = job_minus        t.update(job_minus)        t.set_postfix(info)

如上,我们声明了一个 tqdm 对象:

这个对象的计数总量是我们的总工作量 total=task.jobs进度条的前缀是 'Doing jobs'每一次刷新进度,我们进度条的增量是 t.update(job_minus)我们进度条后缀输出信息 info['efficIEncy'] = job_minus

来看看效果。

❯ python .\example.pyDoing jobs:   9%|██▏                    | 94/1000 [00:03<00:28, 31.73it/s, efficIEncy=30]

动图如下。

总结

通过实例探讨了 tqdm 进度条的使用。

我是小拍,老铁们记得点赞关注!微信 PiperLHJ 。

总结

以上是内存溢出为你收集整理的给 Python 添加进度条 | 给小白的 tqdm 精炼实例!全部内容,希望文章能够帮你解决给 Python 添加进度条 | 给小白的 tqdm 精炼实例!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1184886.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存