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

熱線電話:13121318867

登錄
首頁精彩閱讀隨心所欲地用Python處理時間(1&2)
隨心所欲地用Python處理時間(1&2)
2021-09-30
收藏

作者:閑歡

來源:Python 技術(shù)

現(xiàn)在的開發(fā)工具太多了,而且每個開發(fā)工具都致力于做成最好用最智能的工具,所以功能越堆越多,越懟越智能。安裝這些開發(fā)工具比較燒腦,經(jīng)常需要經(jīng)過許多配置步驟。作為一個 Python 開發(fā)者來說,好多人光是這些配置都要弄半天。配置好之后,打開軟件,發(fā)現(xiàn)滿屏都是菜單、按鈕,無從下手,學習這些功能使用又是一大難題。

今天為大家推薦一款超級輕量級的 IDE —— Thonny。

這是一款對初學者特別友好的開發(fā) IDE,它是由愛沙尼亞的 Tartu 大學開發(fā),十分易于上手,還支持插件。

安裝

Thonny 的官網(wǎng)是 https://thonny.org/ ,直接進去就能看到下載選項,支持三大操作系統(tǒng)(Windows、Mac、Linux)。

下載下來之后,按照正常的安裝軟件流程安裝就行了。在安裝過程中,還可以選擇支持的語言:

這點是非常友好的,可以選擇“簡體中文”,就憑這一點已經(jīng)比大多數(shù)開發(fā)工具強了。其他開發(fā)工具大多要自己去網(wǎng)上找漢化版才能顯示中文界面。

安裝完成之后,啟動軟件,界面是這樣的:

我們可以看到,界面非常簡潔,初始用戶界面上沒有任何可能分散初學者注意力的功能,看起來只需要在中央空白區(qū)敲代碼就行。

使用

簡單上手

直接在程序編輯區(qū)輸入代碼,然后在功能區(qū)選擇“運行”或者“調(diào)試”按鈕就行。

運行之后,會在底部顯示 Shell 對話框,里面顯示的就是程序運行的結(jié)果:

變量界面

在視圖菜單中有好多顯示選項,點擊“變量”選項,就勾選了“變量”選項,界面右邊會出現(xiàn)“變量”選項的視圖區(qū)域。當你運行程序的時候,特別是用 debug 模式運行的時候,在每一步過程中,都可以在變量界面上看到變量值的變化:

對于初學者來說,這功能可以幫助你一步步去查看程序運行的過程中變量是如何變化的。

調(diào)試

Thonny 的調(diào)試也非常簡單,你不需要設(shè)置斷點,只需要用 debug 模式運行,工具會自動地一步步運行程序,步驟是按照程序結(jié)構(gòu)走的,而不僅僅是代碼行。而且如果有嵌套函數(shù)的話,工具會自動地彈出一個小窗口來顯示函數(shù)的執(zhí)行,這對于初學者簡直是福音。他們可以很好地理解函數(shù)調(diào)用的工作原理,對于理解遞歸尤其重要。

錯誤提示

如果你運行的代碼有語法錯誤,這個 IDE 不僅僅會提示錯誤的行,還會有一個窗口給出提示和建議:

這段代碼提示的是第4行有語法問題,但是如果你看第4行,你肯定會發(fā)現(xiàn)沒問題。在提示區(qū)就會告訴我們可能是第2行少了一個反括號。這就很人性化了,對于初學者來說,他可能在第4行上糾結(jié)很久都不知道哪里的問題。這個提示給的是相當?shù)牡轿弧?

插件

Thonny 也支持你像其他一些 IDE 一樣安裝插件來擴展你的功能。在“工具”菜單下有一個“管理插件”的功能,點擊打開管理界面,你就可以在輸入框中搜索插件來進行安裝了。你也可以選擇已經(jīng)安裝的插件來進行“升級”或者“卸載”,都是非常簡單易懂的操作。

總結(jié)

Thonny 是由愛沙尼亞的 Tartu 大學開發(fā)的一款基于 Python 的開源 IDE,旨在幫助初學者快速入門 Python。雖然軟件界面很簡單,但是我覺得他們非常牛,他們真的是從一個初學者的角度去思考如何使用和操作,怎樣讓他們更好地上手,怎樣解決他們在學習中的一些難題。這種非商業(yè)化的軟件能有如此用心,真可謂難能可貴。

數(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); }