日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
給Python添加進(jìn)度條|給小白的Tqdm精煉實(shí)例!

[[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ù),滿足客戶于互聯(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):

 
 
 
 
  1. for i in range(100): 
  2.     do_something()  # 這里做某些事 

假設(shè) do_something() 很慢,且運(yùn)行時(shí)間不穩(wěn)定,當(dāng)我們運(yùn)行時(shí),我們并不知道運(yùn)行到哪里了。

我們引入一個(gè)進(jìn)度條。

 
 
 
 
  1. from tqdm import trange 
  2. for i in trange(100): 
  3.     do_something() 
  4.  
  5. 輸出 
  6.   5%|██▌                   

如上,我們就可用實(shí)時(shí)查看進(jìn)度。

安裝

這個(gè)庫(kù)并不是 python 自帶的庫(kù),使用 pip 安裝就可。

 
 
 
 
  1. pip install tqdm 

來看看我的實(shí)驗(yàn)環(huán)境。

 
 
 
 
  1.  python --version 
  2. Python 3.7.0 
  3.  
  4. >>> tqdm.__version__ 
  5. '4.59.0' 

入門實(shí)例

說實(shí)在的,官方文檔[1]寫得并不是很好。

對(duì)于 range() ,我們把其改為 tqdm 中的 trange() 就可以。

其實(shí), trange(5) 相當(dāng)于 tqdm(range(5)) 。

 
 
 
 
  1. >>> a = ['a', 'b', 'c'] * 10000 
  2. >>> from tqdm import tqdm 
  3. >>> for i in tqdm(a): 
  4. ...     pass 
  5. ... 
  6. 100%|███████████| 30000/30000 [00:00
  7. >>> 

使用 for i in tqdm(a) 和 for i in a 邏輯上沒有區(qū)別,但是前者讓控制臺(tái)多出了一個(gè)進(jìn)度條。

自定義進(jìn)度條

其實(shí),我們還可用「手把手地」操作進(jìn)度條。尤其是當(dāng)我們的進(jìn)度并不是單純的依靠可迭代變量時(shí)。

假設(shè)我們有個(gè)任務(wù)如下。

 
 
 
 
  1. import random 
  2. import time 
  3.  
  4. class Task: 
  5.     def __init__(self) -> None: 
  6.         self.jobs = int(1e3) 
  7.  
  8.     @property 
  9.     def job_done(self) -> bool: 
  10.         return self.jobs <= 0 
  11.  
  12.     def do_job(self) -> int: 
  13.         time.sleep(1) 
  14.         job_minus = random.randint(1, 50) 
  15.         self.jobs = max(0, self.jobs - job_minus) 
  16.         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)度條。

 
 
 
 
  1. from tqdm import tqdm 
  2.  
  3. task: Task = Task() 
  4.  
  5. info = { 'efficiency': None } 
  6.  
  7. with tqdm( 
  8.     total=task.jobs, desc='Doing jobs' 
  9. ) as t: 
  10.  
  11.     while not task.job_done: 
  12.  
  13.         job_minus = task.do_job() 
  14.  
  15.         info['efficiency'] = job_minus 
  16.         t.update(job_minus) 
  17.         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

來看看效果。

 
 
 
 
  1.  python .\example.py 
  2. Doing jobs:   9%|██▏                    | 94/1000 [00:03<00:28, 31.73it/s, efficiency=30] 

動(dòng)圖如下。

總結(jié)

 

通過實(shí)例探討了 tqdm 進(jìn)度條的使用。

 


名稱欄目:給Python添加進(jìn)度條|給小白的Tqdm精煉實(shí)例!
標(biāo)題鏈接:http://www.dlmjj.cn/article/djhocpg.html