新聞中心
[[405507]]

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的浦江網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
本文轉(zhuǎn)載自微信公眾號(hào)「Piper蛋窩」,作者Piper蛋 。轉(zhuǎn)載本文請(qǐng)聯(lián)系Piper蛋窩公眾號(hào)。
假設(shè)我們有一個(gè)循環(huán):
- for i in range(100):
- do_something() # 這里做某些事
假設(shè) do_something() 很慢,且運(yùn)行時(shí)間不穩(wěn)定,當(dāng)我們運(yùn)行時(shí),我們并不知道運(yùn)行到哪里了。
我們引入一個(gè)進(jìn)度條。
- from tqdm import trange
- for i in trange(100):
- do_something()
- 輸出
- 5%|██▌
如上,我們就可用實(shí)時(shí)查看進(jìn)度。
安裝
這個(gè)庫(kù)并不是 python 自帶的庫(kù),使用 pip 安裝就可。
- pip install tqdm
來(lái)看看我的實(shí)驗(yàn)環(huán)境。
- python --version
- Python 3.7.0
- >>> tqdm.__version__
- '4.59.0'
入門(mén)實(shí)例
說(shuō)實(shí)在的,官方文檔[1]寫(xiě)得并不是很好。
對(duì)于 range() ,我們把其改為 tqdm 中的 trange() 就可以。
其實(shí), trange(5) 相當(dāng)于 tqdm(range(5)) 。
- >>> 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 邏輯上沒(méi)有區(qū)別,但是前者讓控制臺(tái)多出了一個(gè)進(jìn)度條。
自定義進(jìn)度條
其實(shí),我們還可用「手把手地」操作進(jìn)度條。尤其是當(dāng)我們的進(jìn)度并不是單純的依靠可迭代變量時(shí)。
假設(shè)我們有個(gè)任務(wù)如下。
- import random
- import time
- class 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 個(gè)任務(wù)要做,但是這些任務(wù)并不是每次做一個(gè),而是每次可能做 [1, 50) 個(gè)中的任意數(shù)量的工作。
所以我們不可以單純讓 do_job 運(yùn)行 1000 次,因?yàn)槊看?do_job 的效率不同。
這時(shí)我們定制我們的進(jìn)度條。
- from tqdm import tqdm
- task: 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)
如上,我們聲明了一個(gè) tqdm 對(duì)象:
- 這個(gè)對(duì)象的計(jì)數(shù)總量是我們的總工作量 total=task.jobs
- 進(jìn)度條的前綴是 'Doing jobs'
- 每一次刷新進(jìn)度,我們進(jìn)度條的增量是 t.update(job_minus)
- 我們進(jìn)度條后綴輸出信息 info['efficiency'] = job_minus
來(lái)看看效果。
- python .\example.py
- Doing jobs: 9%|██▏ | 94/1000 [00:03<00:28, 31.73it/s, efficiency=30]
動(dòng)圖如下。
總結(jié)
通過(guò)實(shí)例探討了 tqdm 進(jìn)度條的使用。
分享題目:給Python添加進(jìn)度條|給小白的Tqdm精煉實(shí)例!
分享網(wǎng)址:http://fisionsoft.com.cn/article/djhocpg.html


咨詢(xún)
建站咨詢(xún)
