對於一些大型的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();
同一時候。這裏值得注意的是,Eclipse中的Pydev中的控制檯,對於\r依舊是處理成換行符,使得輸出變成例如如下的樣子。這裏沒有辦法了!utf-8