【Python】輸出程序運行的百分比

對於一些大型的Python程序。咱們需要在命令行輸出其百分比,顯得更加友好,以避免被人誤會程序陷入死循環、假死的窗口。python

關鍵是利用到不換行的輸出符\r,\r的輸出。將直接覆蓋掉此行的內容。post

比方例如如下的程序,是一個i從0自加的十萬的過程,即便對於現在高性能的CPU也是需要幾秒的時間的,咱們要輸出其運行時候的百分比,可以在引入sys這個包以後。利用到sys.stdout.write輸出。避免原生態的print自帶的\n影響大局。性能

同一時候要控制百分比的小數位爲4。命令行

程序運行的百分比剛好爲i當前的值除以值爲十萬的total。code

#-*-coding:utf-8-*-
import sys;
total=100000
for i in range(0,total):
    percent=float(i)*100/float(total)
    sys.stdout.write("%.4f"%percent);
    sys.stdout.write("%\r");
    sys.stdout.flush();
    
sys.stdout.write("100%!finish!\r");
sys.stdout.flush();

程序執行結果例如如下:


但是,這裏i每自增一次就要求當前的執行的百分比。把本來100000次的浮點運算徒然添加到二十萬次,同一時候要刷新100000次的屏幕,很不合理,所以對於程序。可以作例如如下的改進,執行百分比僅保留2位小數,同一時候i每累積100才進行百分比輸出。程序改動以後例如如下:ip

#-*-coding:utf-8-*-
import sys;
total=100000
for i in range(0,total):
    if i%100==0:
        percent=float(i)*100/float(total)
        sys.stdout.write("%.2f"%percent);
        sys.stdout.write("%\r");
        sys.stdout.flush();
    
sys.stdout.write("100%!finish!\r");
sys.stdout.flush();

從求執行百分比的100000次的浮點運算改成100000次的條件運算,同一時候僅要刷新屏幕1000次,程序的執行耗時將大大下降。

同一時候。這裏值得注意的是,Eclipse中的Pydev中的控制檯,對於\r依舊是處理成換行符,使得輸出變成例如如下的樣子。這裏沒有辦法了!utf-8

相關文章
相關標籤/搜索