99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀幾行代碼就能實現(xiàn)漂亮進度條,太贊了
幾行代碼就能實現(xiàn)漂亮進度條,太贊了
2021-12-02
收藏

作者:閑歡

來源:Python 技術(shù)

作為程序員,我們經(jīng)常會遇到比較耗時的操作,這個時候我們大多數(shù)人會無助地等待程序執(zhí)行完成,有些人會趁機摸一下魚,以便渡過這個無聊看起來又有點未知的時間,我就是這樣做的。

但是,我們也可以選擇另一種方式——用一個炫酷的進度條,來觀察處理進度,也可以及時了解程序運行的情況,做到心中有數(shù)。

今天就給大家介紹 Python 的一個庫—— tqdm ,它就能非常完美的支持和解決這些問題,可以實時輸出處理進度而且占用的CPU資源非常少,支持windows、Linux、mac等系統(tǒng),支持循環(huán)處理、多進程、遞歸處理、還可以結(jié)合linux的命令來查看處理情況,等進度展示。

安裝

我們常見的安裝方式是直接 pip 安裝:

pip install tqdm

但是我用這種方式安裝的時候報錯:

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

看報錯的意思是這個 pypi.org 不是可信網(wǎng)站,于是我加上了:

pip install tqdm --trusted-host pypi.org

結(jié)果還是這個報錯。

這有點無語了。我接著嘗試使用豆瓣的源來進行安裝:

pip install -i https://pypi.douban.com/simple tqdm

還是一樣的報錯。

但是我瀏覽器訪問這個網(wǎng)站沒問題:https://pypi.org/project/tqdm/

既然這樣,我就把文件下載下來再安裝吧。

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

下載下來之后,我將 whl 文件放在我的項目目錄,然后使用命令行安裝:

pip install --trusted-host pypi.org tqdm-4.62.3-py2.py3-none-any.whl

這回安裝沒報錯。我再用命令檢查一下安裝是否成功:

pip show tqdm

命令行成功顯示信息:

Name: tqdm Version: 4.62.3 Summary: Fast, Extensible Progress Meter Home-page: https://tqdm.github.io Author: None Author-email: None License: MPLv2.0, MIT Licences Location: c:pworkspacemypyvenvlibsite-packages Requires: colorama Required-by:

折騰了半天,終于安裝成功了!

使用實例

本文的示例都是在 jupyter notebook 環(huán)境下運行的,不同環(huán)境運行的效果會有差別。

我們進入 tqdm 的源碼,可以找到 __init__ 方法:

def __init__(self, iterable=None, desc=None, total=None, leave=True, file=None,
                 ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None,
                 ascii=None, disable=False, unit='it', unit_scale=False,
                 dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0,
                 position=None, postfix=None, unit_divisor=1000, write_bytes=None,
                 lock_args=None, nrows=None, colour=None, delay=0, gui=False,
                 **kwargs):

從中我們可以看到 tqdm 支持很多參數(shù),下面列一些常見的參數(shù):

  • iterable:可迭代的對象,在手動更新時不需要進行設(shè)置。
  • desc:字符串,左邊進度條描述文字。
  • total:總的項目數(shù)。
  • leave:布爾值,迭代完成后是否保留進度條。
  • file:輸出指向位置,默認是終端, 一般不需要設(shè)置。
  • ncols:調(diào)整進度條寬度,默認是根據(jù)環(huán)境自動調(diào)節(jié)長度,如果設(shè)置為0,就沒有進度條,只有輸出的信息。
  • unit:描述處理項目的文字,默認是'it',例如: 100 it/s,處理照片的話設(shè)置為'img' ,則為 100 img/s。
  • unit_scale:自動根據(jù)國際標準進行項目處理速度單位的換算,例如 100000 it/s >> 100k it/s。

基于可迭代對象使用

直接將可迭代對象傳入作為參數(shù),我們來看一下例子:

from tqdm import tqdm from time import sleep for char in tqdm(['h', 'e', 'l', 'l', 'o']):
    sleep(0.25) for i in tqdm(range(100)):
    sleep(0.05)

實現(xiàn)的進度條效果如下:

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

這里面的 tqdm(range()) 我們也可以用 tqdm 提供的 trange() 來代替,可以簡化代碼。

from tqdm.notebook import trange for i in trange(100):
    sleep(0.05)

實現(xiàn)的進度條效果如下:

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

我們還可以為進度條添加描述:

pbar = tqdm(range(5)) for char in pbar:
    pbar.set_description("Progress %d" %char) sleep(1)

實現(xiàn)的進度條效果如下:

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

接下來,我要改變一下進度條的顏色:

手動控制進度條

我們可以使用 with 語句來手動控制進度條。

with tqdm(total=100) as pbar: for i in range(1, 5): sleep(1) # 更新進度 pbar.update(10*i)

這里我設(shè)置進度條的更新的間隔,設(shè)置總數(shù)為 total=100,然后分四次,使得進度條按 10%,20%,30%,40%的間隔來更新。

實現(xiàn)的進度條效果如下:

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

接下來, 我要改變一下進度條的顏色:

with tqdm(total=100, colour='yellow') as pbar: for i in range(1, 5): sleep(1) # 更新進度 pbar.update(10*i)

我把進度條改為了黃色。

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

接下來,我們來個嵌套進度條玩玩。

for i in trange(3, desc='outer loop'): for i in trange(100, desc='inner loop', leave=False): sleep(0.01)

這里我用兩層 for 循環(huán)實現(xiàn)了嵌套,并且將內(nèi)層的 參數(shù) leave 設(shè)置為 False ,意思是內(nèi)層的進度條每執(zhí)行一次都會消失。

我們來看看最終運行的效果:

幾行代碼就能實現(xiàn)漂亮進度條,太贊了

總結(jié)

這個進度條庫的使用方法是不是很簡單,幾行代碼就能為我們的程序增色不少。心動不如行動,趕快用起來吧!

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }