Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美激情欧美狂野欧美精品免费,91美女精品app,韩国三级跳视频在线观看

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          vite+vue3實(shí)現(xiàn)網(wǎng)頁(yè)版編輯器,帶高亮以及代碼提

          《vite+vue3實(shí)現(xiàn)網(wǎng)頁(yè)版編輯器,帶高亮以及代碼提示(以SQL語(yǔ)言為例)》

          ## 引言:探索Vite與Vue3結(jié)合構(gòu)建高效Web應(yīng)用

          隨著前端技術(shù)的飛速發(fā)展,Vite和Vue3已成為現(xiàn)代Web開(kāi)發(fā)領(lǐng)域的熱門(mén)工具。Vite以其快速冷啟動(dòng)、熱更新等特性讓開(kāi)發(fā)者享受前所未有的開(kāi)發(fā)體驗(yàn);而Vue3則憑借其優(yōu)秀的組件化設(shè)計(jì)與Composition API,極大地提高了開(kāi)發(fā)效率和代碼可維護(hù)性。本文將引導(dǎo)您如何利用這兩者搭建一款功能齊全、性能卓越的網(wǎng)頁(yè)版SQL編輯器,包括代碼高亮顯示及智能提示等功能。

          ## 一、項(xiàng)目初始化與環(huán)境配置

          ### 1. 創(chuàng)建項(xiàng)目

          首先,確保已安裝Node.js和npm。然后通過(guò)Vite創(chuàng)建一個(gè)基于Vue3的新項(xiàng)目:

          ```bash

          npm create vite@latest my-sql-editor --template vue

          cd my-sql-editor

          npm install

          ```

          ### 2. 安裝相關(guān)依賴

          為了實(shí)現(xiàn)實(shí)時(shí)語(yǔ)法高亮和代碼提示,我們需要借助`codemirror`庫(kù)及其SQL相關(guān)的插件:

          ```bash

          npm install codemirror @codemirror/lang-sql

          ```

          ## 二、編寫(xiě)基礎(chǔ)HTML結(jié)構(gòu)與Vue組件

          ### 1. 在App.vue中引入CodeMirror

          ```html

          <template>

          <div id="app">

          <textarea ref="editor"></textarea>

          </div>

          </template>

          <script setup lang="ts">

          import { onMounted, ref } from 'vue';

          import CodeMirror from 'codemirror';

          onMounted(() => {

          const editor = CodeMirror.fromTextArea(

          document.querySelector('textarea'),

          {

          mode: 'text/x-sql',

          lineNumbers: true,

          theme: 'dracula', // 更多主題可以自定義選擇

          }

          );

          });

          </script>

          ```

          此處我們已在App.vue中引入并初始化了一個(gè)基本的CodeMirror編輯器,并設(shè)置SQL模式以支持初步的語(yǔ)義高亮。

          ## 三、實(shí)現(xiàn)SQL代碼高亮

          上述代碼已經(jīng)實(shí)現(xiàn)了基礎(chǔ)的SQL高亮,CodeMirror內(nèi)置了對(duì)SQL的支持。但為了讓效果更佳,我們可以進(jìn)一步優(yōu)化配置項(xiàng),如添加SQL關(guān)鍵字高亮等。

          ### 高級(jí)配置示例:

          ```javascript

          import '@codemirror/theme-dracula'; // 引入主題樣式

          import { Extension } from '@codemirror/state';

          const sqlExtensions: Extension[] = [

          // SQL語(yǔ)言插件

          langSql(),

          // 添加代碼行號(hào)

          lineNumbers(),

          // 設(shè)置主題

          EditorView.theme({

          '&': { background: '#282a36' },

          '.cm-comment': { color: '#6272a4' }, // 注釋顏色

          '.cm-keyword': { color: '#ff79c6' }, // 關(guān)鍵字顏色

          // ...其他樣式自定義

          }),

          ];

          onMounted(() => {

          const editor = CodeMirror.fromTextArea(

          document.querySelector('textarea'),

          {

          extensions: sqlExtensions,

          }

          );

          });

          ```

          ## 四、實(shí)現(xiàn)SQL代碼提示

          CodeMirror并沒(méi)有直接提供SQL的自動(dòng)補(bǔ)全功能,但我們可以通過(guò)自定義擴(kuò)展來(lái)實(shí)現(xiàn)。這里我們使用`hint`和`autocomplete`插件配合自定義數(shù)據(jù)源實(shí)現(xiàn)SQL代碼提示。

          ### 實(shí)現(xiàn)代碼提示功能:

          ```javascript

          // 假設(shè)我們有一個(gè)包含所有SQL關(guān)鍵字和函數(shù)的數(shù)組

          const sqlKeywords = ['SELECT', 'FROM', 'WHERE', 'LIKE', /*...*/ ];

          function sqlHint(cm: EditorView) {

          let cur = cm.state.field(EditorState.cursor).head;

          let token = cm.getTokenAt(cur);


          if (token.string.startsWith('@')) { // 示例:針對(duì)特定字符開(kāi)頭觸發(fā)提示

          let list: string[] = [];

          for (let keyword of sqlKeywords) {

          if (keyword.startsWith(token.string.slice(1))) {

          list.push(keyword);

          }

          }

          return {

          from: cm.posFromIndex(cur - token.start),

          to: cm.posFromIndex(cur),

          list: list,

          };

          }

          }

          const hintExtension = [

          Completion.of([

          { provide: ['completion'], get: () => sqlHint },

          ]),

          ];

          sqlExtensions.push(...hintExtension);

          ```

          ## 結(jié)語(yǔ):進(jìn)階優(yōu)化與未來(lái)展望

          至此,我們已成功利用Vite+Vue3構(gòu)建了一個(gè)具備SQL高亮和代碼提示功能的網(wǎng)頁(yè)版編輯器。然而,為了提升用戶體驗(yàn),還可以在此基礎(chǔ)上進(jìn)行諸如錯(cuò)誤檢測(cè)、實(shí)時(shí)預(yù)覽查詢結(jié)果等更多高級(jí)功能的開(kāi)發(fā)。同時(shí),對(duì)于SQL提示的完善,可以考慮接入數(shù)據(jù)庫(kù)API獲取實(shí)時(shí)表結(jié)構(gòu)信息,實(shí)現(xiàn)更精準(zhǔn)的智能提示。希望本文能為您的前端開(kāi)發(fā)之旅注入新的靈感與動(dòng)力,讓我們一起在前端世界里創(chuàng)造更多可能!

          著這幾年go語(yǔ)言的熱度提高,go的開(kāi)源項(xiàng)目越來(lái)越多,得到商業(yè)應(yīng)用的開(kāi)源也層出不窮,現(xiàn)在給大家推薦一個(gè)go實(shí)現(xiàn)的開(kāi)源mqtt服務(wù)hmq,他支持websocket web調(diào)用和http接口認(rèn)證,配合paho-mqtt.js調(diào)用庫(kù)方便集成到web應(yīng)用中

          GitHub下載最新的hmq,編譯生成hmq.exe

          配置文件為json格式的hmq.config文件,常用配置如下:

          {

          "workerNum": 4096,

          "port": "1883",//服務(wù)端口

          "host": "0.0.0.0",

          "debug": true,

          "httpPort": "8080",

          "tlsPort": "8883",

          "tlsHost": "0.0.0.0",

          "wsPort": "8083", //websocket服務(wù)端口

          "wsPath": "/mqtt",//服務(wù)路徑

          "wsTLS": false,

          "tlsInfo": {

          "verify": false,

          "caFile": "ssl/ca/ca.pem",

          "certFile": "ssl/server/cert.pem",

          "keyFile": "ssl/server/key.pem"

          },

          "plugins": {

          "auth": "authhttp" //通過(guò)http鑒權(quán)


          }

          }

          其中http鑒權(quán)的地址配置在plugins\auth\authhttp目錄下的http.json

          {

          "auth": "http://www.xxx.com/CoreSYS.SYS/AuthMQTT_RawJson.ajax",//一般用戶驗(yàn)證

          "acl": "http://www.xxx.com/CoreSYS.SYS/AuthALCMQTT_RawJson.ajax",//訂閱發(fā)布時(shí)候會(huì)驗(yàn)

          "super": "http://www.xxx.bslzg.com/CoreSYS.SYS/AuthSuperMQTT_RawJson.ajax"//超級(jí)用戶認(rèn)證

          }

          通過(guò)認(rèn)證接口由web應(yīng)用負(fù)責(zé)登陸訂閱發(fā)布權(quán)限鑒定,mqtt連接clientid可使用前綴加用戶id形式如mqtt-username,登陸臨時(shí)密鑰可由web應(yīng)用臨時(shí)分配clientid->口令存入redis,當(dāng)頁(yè)面的mqtt登陸時(shí)由hmq調(diào)用web應(yīng)用登陸認(rèn)證接口,web應(yīng)用通過(guò)clientid拿到臨時(shí)密鑰和傳遞過(guò)來(lái)密鑰比對(duì)一致通過(guò)否則認(rèn)證

          失敗,認(rèn)證成功刪除redis中clientid,發(fā)布和訂閱通過(guò)傳遞過(guò)來(lái)的client id確定客戶端是否有相應(yīng)權(quán)限,至于mqtt消息類型與消息訂閱發(fā)布可查閱相關(guān)資料,通過(guò)此方法可方便快捷實(shí)現(xiàn)web應(yīng)用的實(shí)時(shí)交互,譬如:公告,訂單等信息都可使用mqtt進(jìn)行推送

          以下是mqtt web應(yīng)用用于認(rèn)證的和偽代碼

          //超級(jí)用戶認(rèn)證

          //接口傳遞過(guò)來(lái)clientid username,鑒權(quán)通過(guò)狀態(tài)返回200否則401

          [ModeMethod("{CanNoLogin:true,CanEnable:true}")]

          static public ReturnJson AuthSuperMQTT_RawJson(HttpContext ctx, Object m_Parame)

          {

          ReturnJson m_ReturnJson = new ReturnJson();

          Hashtable m_HH = new Hashtable();

          JsonHelper.OBJToHashTable(m_Parame, m_HH);

          int StatusCode = 401;

          try

          {

          m_ReturnJson.bOK = true;

          WriteLog("AuthSuperMQTT_RawJson:" + JsonHelper.OBJToJsonStr(m_HH));

          string username = "", clientid = "";

          if (KeyIsOK(m_HH, "username"))

          {

          username = m_HH["username"].ToString();

          }

          if (KeyIsOK(m_HH, "clientid"))

          {

          clientid = m_HH["clientid"].ToString();

          }

          string sMsg = "用戶:" + clientid + ",賬戶:" + username;

          WriteLog("AuthSuperMQTT_RawJson:" + sMsg);

          if (m_EMQAdminDIC.ContainsKey(clientid))

          {

          string tusername = m_EMQAdminDIC[clientid].ToString();

          if (username == tusername)

          {

          StatusCode = 200;

          }

          }

          else

          {

          }

          WriteLog("AuthSuperMQTT_RawJson 返回碼:" + StatusCode.ToString());

          ctx.Response.StatusCode = StatusCode;//驗(yàn)證失敗調(diào)用

          //ctx.Response.StatusCode=200;//驗(yàn)證通過(guò)調(diào)用

          ctx.Response.End();

          return m_ReturnJson;

          }

          catch (Exception e)

          {

          m_ReturnJson.bOK = false;

          ctx.Response.StatusCode = StatusCode;

          WriteLog("AuthSuperMQTT_RawJson 返回碼:" + StatusCode.ToString() + ",異常:" + e.ToString());

          ctx.Response.End();

          return m_ReturnJson;

          }


          }

          //訂閱發(fā)布授權(quán)

          [ModeMethod("{CanNoLogin:true,CanEnable:true}")]

          static private ReturnJson AuthALCMQTT_RawJson(HttpContext ctx, Object m_Parame)

          {

          ReturnJson m_ReturnJson = new ReturnJson();

          Hashtable m_HH = new Hashtable();

          JsonHelper.OBJToHashTable(m_Parame, m_HH);

          int StatusCode = 401;

          try

          {

          m_ReturnJson.bOK = true;

          WriteLog("AuthALCMQTT_RawJson:" + JsonHelper.OBJToJsonStr(m_HH));

          string username = "", clientid = "", topic = "", access = "", ipaddr = "";

          if (KeyIsOK(m_HH, "username"))

          {

          username = m_HH["username"].ToString();

          }

          if (KeyIsOK(m_HH, "clientid"))

          {

          clientid = m_HH["clientid"].ToString();

          }

          if (KeyIsOK(m_HH, "topic"))

          {

          topic = m_HH["topic"].ToString();

          }

          if (KeyIsOK(m_HH, "access"))

          {

          access = m_HH["access"].ToString();

          }

          if (KeyIsOK(m_HH, "ipaddr"))

          {

          ipaddr = m_HH["ipaddr"].ToString();

          }

          if (access == "1")

          {

          access = "訂閱";

          }

          if (access == "2")

          {

          access = "發(fā)布";

          }

          string sMsg = "用戶:" + clientid + ",賬戶:" + username + "," + access + ",消息:" + topic + ",ip地址:" + ipaddr;

          WriteLog("AuthALCMQTT_RawJson:" + sMsg);

          if (access == "訂閱")

          {

          if (AuthSubFreeMQTT(ctx, topic, username, clientid))

          {

          StatusCode = 200;

          ctx.Response.StatusCode = StatusCode;//驗(yàn)證通過(guò)調(diào)用

          ctx.Response.End();

          return m_ReturnJson;

          }

          else

          {

          StatusCode = 401;

          ctx.Response.StatusCode = StatusCode;//驗(yàn)證通過(guò)調(diào)用

          ctx.Response.End();

          return m_ReturnJson;

          }

          }

          else

          {

          if (AuthPubFreeMQTT(ctx, topic, username, clientid))

          {

          StatusCode = 200;

          ctx.Response.StatusCode = StatusCode;//驗(yàn)證通過(guò)調(diào)用

          ctx.Response.End();

          return m_ReturnJson;

          }

          else

          {

          StatusCode = 401;

          ctx.Response.StatusCode = StatusCode;//驗(yàn)證通過(guò)調(diào)用

          ctx.Response.End();

          return m_ReturnJson;

          }

          }

          }

          catch (Exception e)

          {

          m_ReturnJson.bOK = false;

          ctx.Response.StatusCode = StatusCode;

          ctx.Response.End();

          return m_ReturnJson;

          }

          }

          }

          //普通用戶登錄鑒權(quán)

          [ModeMethod("{CanNoLogin:true,CanEnable:true}")]

          static private ReturnJson AuthMQTT_RawJson(HttpContext ctx, Object m_Parame)

          {

          ReturnJson m_ReturnJson = new ReturnJson();

          Hashtable m_HH = new Hashtable();

          JsonHelper.OBJToHashTable(m_Parame, m_HH);

          int StatusCode = 401;

          try

          {

          m_ReturnJson.bOK = true;

          WriteLog("AuthMQTT20200107_RawJson:" + JsonHelper.OBJToJsonStr(m_HH));

          string username = "", clientid = "", password = "";

          if (KeyIsOK(m_HH, "username"))

          {

          username = m_HH["username"].ToString();

          }

          if (KeyIsOK(m_HH, "clientid"))

          {

          clientid = m_HH["clientid"].ToString();

          }

          if (KeyIsOK(m_HH, "password"))

          {

          password = m_HH["password"].ToString();

          }

          string sMsg = "用戶:" + clientid + ",賬戶:" + username + ",口令:" + password;

          WriteLog("AuthMQTT20200107_RawJson:" + sMsg);

          if (m_EMQAdminDIC.ContainsKey(clientid))

          {

          string tusername = m_EMQAdminDIC[clientid].ToString();

          if (username == tusername)

          {

          StatusCode = 200;

          }

          }

          if (StatusCode != 200)

          {

          if (username == password)

          {

          using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())

          {

          try

          {

          string SQLString = "select username from sys_users where sys_users_nodeuuid=@sys_users_nodeuuid and username=@username";

          List<Hashtable> m_varList = new List<Hashtable>();

          m_varList.Add(NodeDBEngine.VarString("@username", username));

          m_varList.Add(NodeDBEngine.VarDecimal("@sys_users_nodeuuid", clientid));

          bool bOK;

          DataSet pSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out bOK, m_varList);

          if (bOK)

          {

          if (pSet.Tables[0].Rows.Count > 0)

          {

          WriteLog("AuthMQTT20200107_RawJson 1");

          StatusCode = 200;

          }

          else

          {

          if (AuthConnectFreeMQTT(ctx, username, clientid, password))

          {

          WriteLog("AuthMQTT20200107_RawJson 2");

          StatusCode = 200;

          }

          else

          {

          WriteLog("AuthMQTT20200107_RawJson 3");

          StatusCode = 401;

          }

          }

          }

          else

          {

          WriteLog("AuthMQTT20200107_RawJson 4");

          StatusCode = 401;


          }

          }

          catch (Exception r)

          {

          WriteLog("AuthMQTT20200107_RawJson 5:" + r.ToString());

          StatusCode = 401;


          }

          }

          }

          else

          {

          if (AuthConnectFreeMQTT(ctx, username, clientid, password))

          {

          WriteLog("AuthMQTT20200107_RawJson OK1");

          StatusCode = 200;


          }

          else

          {

          WriteLog("AuthMQTT20200107_RawJson 6");

          StatusCode = 401;


          }

          }

          }

          else

          {

          WriteLog("AuthMQTT20200107_RawJson OK2");

          StatusCode = 200;

          }

          }

          catch (Exception e)

          {

          StatusCode = 401;

          }

          ctx.Response.StatusCode = StatusCode;//驗(yàn)證通過(guò)調(diào)用

          ctx.Response.End();

          return m_ReturnJson;

          }

          關(guān)于paho-mqtt.js的使用可參看相關(guān)資料

          在前面:

          好久沒(méi)發(fā)文了……2021年余額基本告罄,為了走好2022年的IT之旅,這里為Python編程斗士或相關(guān)潛在人物,評(píng)估羅列了一下業(yè)界的開(kāi)發(fā)IDE或編碼用的文本編輯器,你且看了后再來(lái)自行了斷——說(shuō)錯(cuò)了,自行決斷,以為來(lái)年早早做個(gè)準(zhǔn)備~

          1.簡(jiǎn)述

          Python 由其創(chuàng)建者 Guido van Rossum 于 1991 年推出,是用于自動(dòng)化特定重復(fù)性任務(wù)的主要編程語(yǔ)言之一。在許多開(kāi)發(fā)人員/程序員的貢獻(xiàn)下,該語(yǔ)言已經(jīng)發(fā)生了巨大的發(fā)展。如果您是編程新手,建議您從 Python 開(kāi)始學(xué)編程。 Python 解釋器可用于多種操作系統(tǒng),例如 Linux、macOS 和 Windows。

          Python 是一種通用語(yǔ)言,這意味著它可以用于從 Blender(3D 建模軟件)到 Web 開(kāi)發(fā)的許多應(yīng)用程序中都有。您可以使用 shell學(xué)習(xí)或來(lái)為小型項(xiàng)目編寫(xiě) Python 代碼。但是,如果您想處理更大的項(xiàng)目,強(qiáng)烈建議使用專用代碼編輯器或集成開(kāi)發(fā)環(huán)境 (IDE)。每個(gè) Python IDE 或代碼編輯器在功能、用戶界面等方面都各不相同。Python 社區(qū)也推薦了一些主流的這類工具。

          在繼續(xù)之前,先來(lái)看看什么是 IDE 和代碼編輯器,以及良好的 Python 編碼環(huán)境的要求都有哪些。

          2.IDE 和代碼編輯器

          無(wú)論您是這方面的新手還是老手,都需要一個(gè) IDE(集成開(kāi)發(fā)環(huán)境)或代碼編輯器來(lái)展示您的編碼技巧和才能。 IDE 是一種軟件,它將常見(jiàn)的開(kāi)發(fā)人員工具整合到一個(gè)用戶友好的 GUI(圖形用戶界面)中。 IDE 主要包括用于編寫(xiě)軟件代碼的源代碼編輯器、用于軟件的本地自動(dòng)化構(gòu)建的特征工具,如編譯計(jì)算機(jī)源代碼。最后,它有一個(gè)調(diào)試器,一個(gè)用于測(cè)試其他程序的程序。除了這些功能之外,IDE 還可以具有更多功能,并且每個(gè) IDE 的功能各不相同。

          代碼編輯器也是軟件;它就像一個(gè)帶有一些附加功能的文本編輯器。它不是 IDE,因?yàn)?IDE 有許多開(kāi)發(fā)人員工具。根據(jù)編輯器上的語(yǔ)言代碼,它突出顯示特殊關(guān)鍵字并提供一些建議。 Sublime Text、Atom、Visual Studio Code 是一些流行的代碼編輯器。

          3.好的Python編碼環(huán)境的要求

          我們列出了每個(gè)項(xiàng)目在其構(gòu)建階段和之后所需的一些主要和標(biāo)準(zhǔn)功能和要求。一個(gè)項(xiàng)目可以有比下面提到的更多的要求,但這些是基本的,IDE必須具備:

          ? 保存并重新加載源代碼

          IDE 或編輯器必須能保存您的工作成果,并可在以后重新打開(kāi)所有內(nèi)容,要能保持離開(kāi)/停止工作時(shí)的狀態(tài),以便節(jié)省開(kāi)發(fā)時(shí)間。

          ? 在相同環(huán)境中執(zhí)行

          要有一個(gè)內(nèi)置的編譯器來(lái)執(zhí)行你的代碼。如果不能在同一個(gè)軟件環(huán)境中執(zhí)行所有代碼,那么它可能是一個(gè)文本編輯器。

          ? 調(diào)試支持

          大多數(shù) IDE 中的調(diào)試器提供單步調(diào)試代碼并為代碼的部分執(zhí)行設(shè)置斷點(diǎn)。

          ? 語(yǔ)法高亮

          能夠快速發(fā)現(xiàn)代碼中的關(guān)鍵字、變量和符號(hào)使閱讀和理解代碼變得更加容易。

          ? 自動(dòng)代碼格式化

          這是一個(gè)有趣的功能。當(dāng)開(kāi)發(fā)人員使用循環(huán)、函數(shù)或任何其他塊代碼時(shí),代碼會(huì)自行縮進(jìn)。

          有了總體的了解后,開(kāi)始上正菜……

          4.十款最佳Python IDE和代碼編輯器

          為了幫助選擇最佳 Python IDE,我們整理了一些流行的 Python IDE 列表。這些推薦列表,是根據(jù)功能、用戶數(shù)量和每個(gè)用戶體驗(yàn)的積極反饋而來(lái),請(qǐng)看以下列表:

          1) Pydev

          平臺(tái): GNU/Linux/macOS/Windows/Solaris

          官網(wǎng): https://www.eclipse.org/; http://pydev.org/

          類型: IDE


          Pydev

          Eclipse 歷史上為 Java 語(yǔ)言設(shè)計(jì)的集成開(kāi)發(fā)環(huán)境 (IDE)。盡管如此,由于有一個(gè)優(yōu)秀的插件或擴(kuò)展系統(tǒng)機(jī)制,它可以與其他編程語(yǔ)言一起使用,包括 C/C++ 和 PHP。 Pydev 是一個(gè)插件,它允許將 Eclipse 用作 Python IDE,它也支持 Jython 和 IronPython。 Pydev 使用高級(jí)推理技術(shù)來(lái)提供代碼完成和代碼分析等要素。 IDE 還提供以下功能:調(diào)試器、Django、交互式控制臺(tái)、基本語(yǔ)法突出顯示、代碼覆蓋率等。它也是 Python 的最佳 Ide 之一,也是最佳 Python 編輯器。

          Pydev 是免費(fèi)的、獨(dú)立于平臺(tái)的,并促進(jìn)了與 Eclipse 世界的卓越完整性。由于開(kāi)發(fā)人員的努力和技術(shù)的發(fā)展,python 開(kāi)發(fā)幾乎可以與 Eclipse 上的 Java 開(kāi)發(fā)相媲美,使開(kāi)發(fā)體驗(yàn)更加令人印象深刻并且表現(xiàn)卓越。

          優(yōu)勢(shì):

          • ü 易于學(xué)習(xí),還包括多項(xiàng)功能(CPython、Jython、IronPython)
          • ü 在 Eclipse 上通過(guò)Pydev 插件實(shí)現(xiàn) Python 編碼
          • ü 代碼自動(dòng)補(bǔ)全和代碼分析等

          短處:

          • ü 用戶界面不是很豐富。

          2)2. Pycharm

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://www.jetbrains.com/pycharm/

          類型: IDE


          Pycharm

          Pycharm 是 JetBrains 開(kāi)發(fā)的集成開(kāi)發(fā)環(huán)境(IDE)。它因其生產(chǎn)力工具(例如快速修復(fù))而在競(jìng)爭(zhēng)中脫穎而出。它提供三個(gè)版本,Apache 許可的社區(qū)版、教育 (Edu) 版和專有的專業(yè)版。前兩個(gè)版本是開(kāi)源的,因此是免費(fèi)的,而專業(yè)版是付費(fèi)的

          社區(qū)版非常有趣,因?yàn)樗哂胁煌墓δ埽缯Z(yǔ)法高亮、自動(dòng)完成和實(shí)時(shí)代碼驗(yàn)證。付費(fèi)版本具有更高級(jí)的功能,例如完整的數(shù)據(jù)庫(kù)管理和許多社區(qū)版沒(méi)有的重要框架,例如 Django、Flask、Google App、Engine、Pyramid 和 web2py。

          優(yōu)勢(shì):

          • ü 積極的社區(qū)支持;
          • ü 實(shí)時(shí)代碼驗(yàn)證和語(yǔ)法高亮;
          • ü 無(wú)需任何外部要求即可執(zhí)行編輯和調(diào)試 Python 代碼.

          缺陷:

          • ü 加載時(shí)間慢;
          • ü 在可使用現(xiàn)有項(xiàng)目之前,可能需要調(diào)整默認(rèn)設(shè)置。


          3) Sublime Text

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): http://www.sublimetext.com/

          類型: Python Text editor(Python文編輯器)


          Sublime Text

          Sublime Text 最初被認(rèn)為是 Vim 的擴(kuò)展,是一個(gè)用于 C++ 和 Python 編碼的通用文本編輯器。從 2.0 版本開(kāi)始,該軟件支持 44 種主要編程語(yǔ)言,包括 Python。它于 2007 年首次出版,由 Jon Skinner 開(kāi)發(fā)。為了創(chuàng)建這個(gè)軟件,Jon Skinner 采用了三個(gè)原則:

          1. u 謹(jǐn)慎、最小的界面:我們必須能夠?qū)W⒂谖谋径皇菬o(wú)數(shù)的工具欄;
          2. u 文本沒(méi)有被窗口隱藏;
          3. u 使用盡可能多的空間:全屏、多屏、并排文件編輯應(yīng)該是可行的。

          由于不同的插件和包,一旦將 Sublime Text 安裝為 Python IDE,您將獲得高質(zhì)量和強(qiáng)大的 IDE,使您可以非常輕松地在 Python 中進(jìn)行開(kāi)發(fā)。它結(jié)合了基本 Python 文本編輯器的大部分功能,包括可自定義的語(yǔ)法突出顯示。

          優(yōu)勢(shì):

          • ü 速度快,錯(cuò)誤很少(很大的優(yōu)勢(shì))
          • ü 打開(kāi)大文件
          • ü 支持多種語(yǔ)言

          短處:

          • ü 難以修改,一切都通過(guò) JSON。
          • ü 需要許可
          • ü 學(xué)習(xí)無(wú)捷徑

          4)Visual Studio Code

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://code.visualstudio.com

          類型: IDE


          Visual Studio Code

          由 Microsoft 為 Windows、Linux 和 OS 開(kāi)發(fā)的 VS Code 是一個(gè)可擴(kuò)展的代碼編輯器,不要與 Visual Studio 混淆。確實(shí),VS Code 雖小但功能齊全,而且軟件是在 MIT 許可下開(kāi)源的;這就是 Visual Studio 和 VS Code 之間區(qū)別特征。 VS Code 第一版于 2015 年 4 月 29 日發(fā)布,VS Code 在功能上與 Atom 不相上下。的確,就像 Atom 一樣,VS Code 也是建立在 Electron 之上的,這意味著這兩個(gè)程序具有幾乎相同的優(yōu)點(diǎn)和缺點(diǎn)。

          VS Code 是微軟的項(xiàng)目,在 GitHub 上貢獻(xiàn)者數(shù)量最多。這一舉措提升了微軟的知名度,并將其定位為社區(qū)軟件的主要參與者之一。在這種情況下,您可以向環(huán)境中添加新語(yǔ)言,例如 Python。只需下載并安裝相應(yīng)的插件即可適應(yīng)環(huán)境。通過(guò)集成強(qiáng)大的代碼自動(dòng)完成引擎 (IntelliSense)、調(diào)試控制臺(tái)和啟動(dòng)服務(wù)器命令的終端等功能,代碼得到了增強(qiáng)。

          VS Code 的整體設(shè)計(jì)非常好,它的主要優(yōu)點(diǎn)是它提供了基于擴(kuò)展的架構(gòu)。由于 IDE 是輕量級(jí)的,因此可以根據(jù)需要通過(guò)添加連續(xù)的組件來(lái)對(duì)其進(jìn)行擴(kuò)展。

          優(yōu)勢(shì):

          • ü 超過(guò) 4700 個(gè)擴(kuò)展
          • ü 強(qiáng)大的代碼管理引擎
          • ü 從其他 Python 編輯器(例如 Sublime Text 或 Atom)按需導(dǎo)入鍵盤(pán)快捷鍵

          短處:

          • ü 由于可用的擴(kuò)展程序有數(shù)千種,因此很難找到最適合您需求的擴(kuò)展程序

          5)Vim

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://www.vim.org

          類型: Text editor


          Vim

          Vim 是一個(gè)文本編輯器,一個(gè)允許操作文本文件的編輯器。它的源代碼于 1991 年由其主要開(kāi)發(fā)人員 Bram Moolenaar 首次發(fā)布。從那時(shí)起,該軟件得到了開(kāi)發(fā)人員以及開(kāi)發(fā)人員社區(qū)的貢獻(xiàn),得到不斷發(fā)展和改進(jìn)。 Vim 與大多數(shù)其他 Python 文本編輯器的不同之處在于其操作模式,請(qǐng)注意 Vim 具有三種基本模式:插入模式、正常或命令模式以及命令行模式。

          Vim 是免費(fèi)軟件,可以通過(guò)添加擴(kuò)展或修改其配置文件在很大程度上進(jìn)行自定義,這意味著您可以非常輕松地將其調(diào)整為用 Python進(jìn)行開(kāi)發(fā)。該軟件包括多種功能,例如支持同步文件編輯的多緩沖區(qū)、適應(yīng)語(yǔ)言的自動(dòng)縮進(jìn)等。要下載 Vim,只需單擊此鏈接 https://www.vim.org/download.php。

          優(yōu)勢(shì):

          • ü 軟件功能豐富,并通過(guò)社區(qū)支持而提供了良好的用戶體驗(yàn)。
          • ü 文件格式的識(shí)別和轉(zhuǎn)換(UNIX、MS-DOS 或 Mac)

          短處:

          • ü 沒(méi)有足夠的創(chuàng)新功能

          6) GNU/Emacs

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://www.gnu.org

          類型: Text editor


          GNU/Emacs

          Emacs(在 TECO 上運(yùn)行的編輯 MACroS)于 1976 年由 Richard Stallman 創(chuàng)建,是一系列具有可擴(kuò)展功能的文本編輯器。這個(gè)免費(fèi)軟件在開(kāi)發(fā)者社區(qū)中非常受歡迎。

          Richard Stallman 堅(jiān)持這樣一個(gè)事實(shí),即該軟件必須是完全免費(fèi)和可定制的,在編程上沒(méi)有任何限制。幾年后,Emacs 出現(xiàn)了很多版本,包括 1984 年由 Richard Stallman 發(fā)起的 GNU Emacs 和 1991 年推出的 XEmacs。GNU Emacs 使用一種稱為 Emacs Lisp 的強(qiáng)大擴(kuò)展語(yǔ)言,它支持高級(jí)任務(wù),例如寫(xiě)作、編譯程序、上網(wǎng)、閱讀電子郵件和論壇討論。

          該軟件可免費(fèi)下載,適用于所有平臺(tái)。 GNU Emacs 使用各種定制腳本進(jìn)行多種語(yǔ)言的開(kāi)發(fā),包括 Python。

          對(duì)于 Python 開(kāi)發(fā),您可以使用 Emacs 上的 Elpy 擴(kuò)展來(lái)處理 Python 項(xiàng)目。這個(gè)軟件功能非常豐富。在它的眾多功能中,如前面提到的突出顯示語(yǔ)法以區(qū)分關(guān)鍵字和注釋等文檔元素;在文件中自動(dòng)縮進(jìn)以具有一致的格式等。

          優(yōu)勢(shì) :

          • ü 免費(fèi)且完全可定制的軟件。
          • ü 自動(dòng)插入文檔結(jié)構(gòu)所需的元素,如空格、換行符、括號(hào)等;
          • ü 支持它的終端的 24位彩色編碼支持

          短處:

          • ü 編程初學(xué)者不易使用

          7)Atom/Atom-IDE

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://atom.io/

          類型: IDE


          Atom/Atom-IDE

          Atom 包括基本 IDE 的大部分功能。它的功能包括語(yǔ)法突出顯示和自動(dòng)完成。 Atom 的開(kāi)發(fā)人員正在致力于集成 Rust 或 Go 等主要編程語(yǔ)言。 Atom 在提升性能方面不斷取得進(jìn)展,開(kāi)發(fā)者非常關(guān)注社區(qū)的需求和意見(jiàn),努力讓用戶體驗(yàn)更有價(jià)值。打開(kāi)軟件的等待時(shí)間有改進(jìn),重要計(jì)算所需的時(shí)間有小幅改進(jìn),以減少延遲。盡管如此,預(yù)計(jì)未來(lái)幾個(gè)月會(huì)取得越來(lái)越多的進(jìn)展。

          Atom 是最好的 Python 文本編輯器之一。

          促成 Atom 成功的原因之一是其完全可定制的界面。從界面到基本功能,一切都可以改變。另一方面,這種相當(dāng)有利的舉措也是程序延遲的根源問(wèn)題之一。但總的來(lái)說(shuō),Atom 仍然是一個(gè)非常實(shí)用和功能強(qiáng)大的 IDE,我們期待程序更新。

          優(yōu)勢(shì):

          • ü 完全可定制的界面
          • ü 優(yōu)秀的文檔幫助
          • ü 提供幾乎所有 VS Code 必須提供的東西

          短處:

          • ü RAM消耗過(guò)多
          • ü 在系統(tǒng)延遲和優(yōu)化方面需要進(jìn)一步改進(jìn)。
          • ü 不太適合處理大型代碼文件

          8)IDLE

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://docs.python.org/3/library/idle.html

          類型: IDE


          IDLE

          集成開(kāi)發(fā)與學(xué)習(xí)環(huán)境,是Guido Van Rossum于1998年12月發(fā)布的用于Python開(kāi)發(fā)的IDE(集成開(kāi)發(fā)環(huán)境)。它是一個(gè)簡(jiǎn)單的 IDE,因此適合初學(xué)者。它包含一個(gè)多窗口文本編輯器,具有語(yǔ)法高亮顯示和集成調(diào)試器,具有按步、持久斷點(diǎn)和調(diào)用堆棧可見(jiàn)性等調(diào)試特性。

          優(yōu)勢(shì):

          • ü 可用于執(zhí)行單個(gè)語(yǔ)句。
          • ü 可用于創(chuàng)建、修改和執(zhí)行 Python 腳本。
          • ü 提供語(yǔ)法高亮、自動(dòng)完成和智能縮進(jìn)等功能。
          • ü 有一個(gè)帶有單步跟進(jìn)和斷點(diǎn)功能的調(diào)試器。

          短處:

          • ü 在 Linux 的 Python 發(fā)行版中,默認(rèn)情況下 IDLE 不可用。
          • ü 它需要一個(gè)相應(yīng)的包管理器進(jìn)行安裝。

          9.)Spyder

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://github.com/spyder-ide/spyder

          類型: IDE


          Spyder

          Spyder 的第一個(gè)版本命名為 Pydee,由 Pierre Raybaut 于 2008 年創(chuàng)建。它是跨平臺(tái)的,并且在非 copyleft 許可下(非 copyleft 自由軟件由其作者發(fā)布,并獲得重新分發(fā)和修改的許可)。自 2012 年以來(lái),由于他們的貢獻(xiàn),Python 科學(xué)社區(qū)一直在維護(hù) Spyder。

          Spyder 具有語(yǔ)法高亮和自動(dòng)補(bǔ)全等基本功能,還集成了許多科學(xué)使用庫(kù),如 Matplotlib、Numpy、IPython、Scipy。它是開(kāi)源和免費(fèi)的,而且安裝非常容易,這要?dú)w功于 Python 包管理器。

          它提供了科學(xué)軟件包的高級(jí)分析、調(diào)試、編輯、交互式執(zhí)行、深入檢查和可視化功能的獨(dú)特組合。這些主要組件是交互式控制臺(tái)、文檔查看器、變量瀏覽器和開(kāi)發(fā)工具等。

          優(yōu)勢(shì):

          • ü 社區(qū)支持
          • ü 豐富的開(kāi)發(fā)工具功能
          • ü 完整的文檔

          短處:

          • ü 執(zhí)行依賴
          • ü 可選依賴

          10)Thonny

          平臺(tái): Linux/macOS/Windows

          官網(wǎng): https://thonny.org

          類型: IDE


          Thonny

          Thonny 是一個(gè)集成開(kāi)發(fā)環(huán)境 (IDE)。該軟件由愛(ài)沙尼亞的塔爾圖大學(xué)開(kāi)發(fā),主要旨在通過(guò)為 Python 初學(xué)者提供簡(jiǎn)單、輕量級(jí)的 IDE 來(lái)使他們的編碼更輕松。盡管如此,憑借出色的功能,它有點(diǎn)像初學(xué)者的工具包。因此,該軟件特別適合希望開(kāi)始使用 Python 進(jìn)行編程和開(kāi)發(fā)的初學(xué)者,因此完全不適合開(kāi)發(fā)專家。

          用戶界面與所有可能分散初學(xué)者注意力的功能隔離開(kāi)來(lái)。對(duì)于想要快速、輕松、簡(jiǎn)單地使用 Python 進(jìn)行開(kāi)發(fā)的初學(xué)者來(lái)說(shuō),這是一門(mén)經(jīng)過(guò)深思熟慮的課程教學(xué)IDE。

          優(yōu)勢(shì):

          • ü 適合初學(xué)者學(xué)習(xí)的IDE
          • ü 基本和功能用戶界面
          • ü 不需要大量?jī)?nèi)存來(lái)運(yùn)行

          劣勢(shì):

          • ü 如是一位經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員,那么這款軟件肯定不適合您。
          • ü 只有基本功能


          5.2022 年,如何選擇 最好的 Python IDE?

          對(duì)于初學(xué)者,有許多具有基本功能的 IDE可供選擇,可在進(jìn)入下一個(gè)級(jí)別之前發(fā)現(xiàn)此環(huán)境并熟悉每個(gè)功能。對(duì)于有經(jīng)驗(yàn)的開(kāi)發(fā)人員,IDE 的選擇應(yīng)該基于大型項(xiàng)目的需要,IDE 的性能和高級(jí)功能的支持。這里有個(gè)列表供參考:

          2022 IDE for Python


          6.最后

          Python 是最著名的語(yǔ)言之一,甚至可能是最受歡迎的語(yǔ)言。與大多數(shù)主要語(yǔ)言一樣,擁有大量有用、實(shí)用且功能強(qiáng)大的 IDE可供選擇,無(wú)論它們是付費(fèi)的還是免費(fèi)的。

          如果你有更好的IDE推薦,也請(qǐng)您推薦一下,并說(shuō)說(shuō)你的體驗(yàn)。

          如果你是 Python 的初學(xué)者或計(jì)劃學(xué)習(xí)Python編程,請(qǐng)留言給我 @牛旦IT課堂 ,我正在編寫(xiě)一門(mén)《從初學(xué)者到專家級(jí)》 Python 開(kāi)發(fā)者絕佳課程,希望可以助你玩轉(zhuǎn)Python編程。


          主站蜘蛛池模板: 色窝窝无码一区二区三区成人网站| 国产精品一区二区四区| av无码免费一区二区三区| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲av无码一区二区三区不卡| 一区二区国产精品| 人妻少妇精品视频一区二区三区| 精品不卡一区二区| 国产亚洲情侣一区二区无码AV | 国产香蕉一区二区三区在线视频 | 亚洲一区二区无码偷拍| 日本一区高清视频| 国产精品高清一区二区三区不卡 | 日韩AV在线不卡一区二区三区| 无码一区二区三区在线| 国产一区内射最近更新| 日韩人妻精品一区二区三区视频| 波多野结衣中文一区二区免费| 韩国美女vip福利一区| 中文字幕AV一区中文字幕天堂| 国产在线一区观看| ...91久久精品一区二区三区| 爆乳熟妇一区二区三区霸乳| 国产丝袜一区二区三区在线观看| 久久国产精品无码一区二区三区| 亚洲性日韩精品一区二区三区| 精品国产一区二区三区AV| 在线一区二区观看| 国产综合一区二区在线观看| 一区二区精品在线观看| 国产一区二区三区不卡在线看 | 精品一区二区三区四区在线| 麻豆精品人妻一区二区三区蜜桃 | 亚洲美女一区二区三区| 亚洲色偷偷偷网站色偷一区| 国产成人一区二区三区高清| 一区二区三区国产精品 | 国产一区二区三区高清在线观看| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 日本精品少妇一区二区三区| 相泽亚洲一区中文字幕|