1. 程式人生 > >通過用Python輸出進度條效果,學習perf_counter()和sleep()函式的用法。

通過用Python輸出進度條效果,學習perf_counter()和sleep()函式的用法。

首先宣告一下,下面的程式碼是我在看中國大學mooc裡的教學視訊學來的。

覺得很有意思,分享一下。

先看一下,執行完畢的結果吧,進度條跑到了100%,停止之後的效果就是圖中所示。

下面分析一下程式碼:

port time                     #引入time庫,後面用到了該庫的兩個函式perf_counter()和sleep()。

scale = 50                    # 定義變數scale,後面主要用來做迴圈計數、控制輸出字元長度、計算當前進度條的百分比等。

print("執行開始".center(scale//2,"-"))      # .center()控制輸出的樣式,寬度為25//2,即22,漢字居中,兩側填充‘-’。

start = time.perf_counter()   #呼叫一次perf_counter(),從計算機系統裡隨機選一個時間點A,計算其距離當前時間點B1有多少秒。當第二次呼叫該函式時,預設從第一次呼叫的時間點A算起,距離當前時間點B2有多少秒。兩個函式取差,即實現從時間點B1到B2的計時功能。

for i in range(scale+1):   

    a = '*' * i             #  i個長度的‘*’符號

    b = '.' * (scale-i)  # (scale-i) 個長度的‘.’符號。符號‘*’和‘.’總長度為50。

    c = (i/scale)*100  # 顯示當前進度,百分之多少

    dur = time.perf_counter() - start    # 計時,計算進度條走到某一百分比的用時。

    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')    #\r用來在每次輸出完成後,將游標移至行首,這樣保證進度條始終在同一行輸出,即在一行不斷重新整理的效果;{:^3.0f},輸出格式為居中,佔3位,小數點後0位,浮點型數,對應輸出的數為c;{},對應輸出的數為a;{},對應輸出的數為b;{:.2f},輸出有兩位小數的浮點數,對應輸出的數為dur;end='',用來保證不換行,不加這句預設換行。

    time.sleep(0.1)     # 在輸出下一個百分之幾的進度前,停止0.1秒。

print("\n"+"執行結果".center(scale//2,'-'))

如果不太明白上述的解析,可以把程式跑一遍,看看結果再過來看看程式碼就明白啦。

如有錯誤,歡迎指正~