自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

給 Python 添加進度條 | 給小白的 Tqdm 精煉實例!

開發(fā) 后端
我們總共有 1e3 = 1000 個任務要做,但是這些任務并不是每次做一個,而是每次可能做 [1, 50) 個中的任意數(shù)量的工作。所以我們不可以單純讓 do_job 運行 1000 次,因為每次 do_job 的效率不同。

[[405507]]

本文轉載自微信公眾號「Piper蛋窩」,作者Piper蛋 。轉載本文請聯(lián)系Piper蛋窩公眾號。

假設我們有一個循環(huán):

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

假設 do_something() 很慢,且運行時間不穩(wěn)定,當我們運行時,我們并不知道運行到哪里了。

我們引入一個進度條。

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

如上,我們就可用實時查看進度。

安裝

這個庫并不是 python 自帶的庫,使用 pip 安裝就可。

  1. pip install tqdm 

來看看我的實驗環(huán)境。

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

入門實例

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

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

其實, trange(5) 相當于 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<?, ?it/s] 
  7. >>> 

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

自定義進度條

其實,我們還可用「手把手地」操作進度條。尤其是當我們的進度并不是單純的依靠可迭代變量時。

假設我們有個任務如下。

  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 個任務要做,但是這些任務并不是每次做一個,而是每次可能做 [1, 50) 個中的任意數(shù)量的工作。

所以我們不可以單純讓 do_job 運行 1000 次,因為每次 do_job 的效率不同。

這時我們定制我們的進度條。

  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) 

如上,我們聲明了一個 tqdm 對象:

  • 這個對象的計數(shù)總量是我們的總工作量 total=task.jobs
  • 進度條的前綴是 'Doing jobs'
  • 每一次刷新進度,我們進度條的增量是 t.update(job_minus)
  • 我們進度條后綴輸出信息 info['efficiency'] = job_minus

來看看效果。

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

動圖如下。

總結

 

通過實例探討了 tqdm 進度條的使用。

 

責任編輯:武曉燕 來源: Piper蛋窩
相關推薦

2020-12-14 13:32:40

Python進度條參數(shù)

2020-11-27 10:33:11

Linuxcpmv命令

2020-11-02 18:27:29

進度條Linuxcp

2022-04-04 21:33:48

進度條Python

2021-12-15 10:01:06

Python進度條開發(fā)

2011-07-05 15:16:00

QT 進度條

2009-06-06 18:54:02

JSP編程進度條

2009-08-17 14:41:47

C#進度條實現(xiàn)

2022-07-20 09:10:47

Linux

2015-07-31 11:19:43

數(shù)字進度條源碼

2024-08-06 14:29:37

2009-08-17 17:15:48

C# 進度條效果

2009-08-17 14:36:15

C#進度條實現(xiàn)

2023-12-27 13:45:00

Python進度條代碼

2015-01-12 12:13:03

Android進度條ProgressDia

2022-07-23 21:37:48

Python

2015-01-12 09:30:54

Android進度條ProgressDia

2015-08-03 11:39:20

擬物化進度條

2013-03-12 10:35:06

CSS 3

2024-12-02 09:37:51

點贊
收藏

51CTO技術棧公眾號