在計算密集型迭代計算中,我們常常需要知道當前的迭代輪次,最傳統的方法就是列印當前迭代計數器的輪數。那有沒有更好的方法呢?我們可以使用tqdm模組(非py內建,需要單獨按照)來在控制檯繪製進度條,這樣更加直觀。
最簡單的一種方法是直接做為迭代器使用:
from tqdm import tqdm
from time import sleep
n_rounds = 10
for i in tqdm(range(n_rounds)):
sleep(1)
可以看到,迴圈每迭代一次,進度條就會+10%(我們這裡按enter鍵換行顯示):
0%| | 0/10 [00:00<?, ?it/s]
10%|█████▉ | 1/10 [00:01<00:09, 1.00s/it]
20%|███████████▊ | 2/10 [00:02<00:08, 1.00s/it]
30%|█████████████████▋ | 3/10 [00:03<00:07, 1.00s/it]
40%|███████████████████████▌ | 4/10 [00:04<00:06, 1.00s/it]
50%|█████████████████████████████▌ | 5/10 [00:05<00:05, 1.00s/it]
60%|███████████████████████████████████▍ | 6/10 [00:06<00:04, 1.00s/it]
70%|█████████████████████████████████████████▎ | 7/10 [00:07<00:03, 1.00s/it]
80%|███████████████████████████████████████████████▏ | 8/10 [00:08<00:02, 1.00s/it]
90%|█████████████████████████████████████████████████████ | 9/10 [00:09<00:01, 1.00s/it]
100%|██████████████████████████████████████████████████████████| 10/10 [00:10<00:00, 1.00s/it]
還有一種稍複雜的方法,就是自定義進度條計數器的更新。比如下面我們規定迭代到一個奇數則進度條計數器+1,迭代到5個奇數進度條計數器滿。
from tqdm import tqdm
from time import sleep
n_rounds = 10
n_odd = 5
pbar = tqdm(total=n_odd)
for i in range(n_rounds):
sleep(1)
if i % 2 == 1:
pbar.update(1)
可以看到,每迭代到一個奇數,進度條就會+20%(我們這裡按enter鍵換行顯示)。
0%| | 0/5 [00:00<?, ?it/s]
20%|████████████ | 1/5 [00:02<00:08, 2.01s/it]
40%|████████████████████████ | 2/5 [00:04<00:06, 2.01s/it]
60%|████████████████████████████████████ | 3/5 [00:06<00:04, 2.01s/it]
80%|████████████████████████████████████████████████ | 4/5 [00:08<00:02, 2.00s/it]
100%|████████████████████████████████████████████████████████████| 5/5 [00:10<00:00, 2.16s/it]