<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 編程學(xué)習(xí) >> Python >> 正文

      Python和MicroPython之間的差異

      作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2023/11/7

      MicroPython 編程最吸引人的方面之一是它與近二十年來在桌面環(huán)境中廣泛使用的 CPython 相似。由于幾乎相同的語法和設(shè)計范例,在嵌入式和桌面開發(fā)環(huán)境之間移動幾乎是無縫的體驗。這在物聯(lián)網(wǎng)時代是非常可取的,在這個時代,來自嵌入式電子產(chǎn)品的數(shù)據(jù)必須可以在眾多平臺上訪問,包括移動、桌面和云。如果工具和編程語言的變化最小化,開發(fā)人員可以保持精簡,產(chǎn)品開發(fā)周期可以縮短。也就是說,與桌面計算相比,嵌入式硬件環(huán)境的本質(zhì)要求 MicroPython 和 CPython 之間存在一些并非微不足道的差異。

      注:CPython 是用 C 語言實現(xiàn)的 Python 解釋器,也是官方的并且是最廣泛使用的 Python 解釋器。除了 CPython 以外,還有用 JAVA 實現(xiàn)的 Jython 和用.NET 實現(xiàn)的 IronPython,使 Python 方便地和 JAVA 程序、.NET 程序集成。另外還有一些實驗性的 Python 解釋器比如 PyPy。

      CPython 是使用字節(jié)碼的解釋器,任何程序源代碼在執(zhí)行之前先要編譯成字節(jié)碼。它還有和幾種其它語言(包括 C 語言)交互的外部函數(shù)接口。

      CPython 

      嵌入式電子生態(tài)系統(tǒng)在許多方面受到限制,而臺式機或服務(wù)器則沒有。首先,它們受到能源消耗的限制。許多嵌入式設(shè)備都是電池供電的,因此延長電池壽命在性能方面受到限制。臺式計算機可能以幾千兆赫茲的速度運行,而微控制器充其量只能以幾十兆赫茲的速度運行。受限內(nèi)存和存儲也往往是顯著影響 CPython 和 MicroPython 之間差異的限制因素。由于內(nèi)存僅以千字節(jié)或兆字節(jié)為單位,內(nèi)存密集型功能通常會減少甚至完全從 MicroPython 實現(xiàn)中刪除。了解差異對于希望避免調(diào)試嵌入式代碼的許多令人沮喪的時間的開發(fā)人員來說非常重要。

      CPython 開發(fā)人員可以訪問數(shù)百個預(yù)構(gòu)建模塊,只需一行代碼即可將這些模塊輕松添加到他們的項目中。這些模塊消除了在尋求向項目添加功能時重新發(fā)明輪子的需要。但是,許多模塊在內(nèi)存利用率方面可能非常大。MicroPython 要么消除模塊,要么提供專為嵌入式平臺設(shè)計的模塊的定制實現(xiàn)。還有嵌入式平臺獨有的模塊,例如與通用 I/O (GPIO) 引腳的接口。

      CPython 使用自動引用計數(shù)作為其內(nèi)存管理方式,而 MicroPython 使用垃圾收集。從實際的角度來看,當(dāng)需要分配內(nèi)存時,MicroPython 將嘗試在堆上找到足夠大小的內(nèi)存塊。如果失敗,MicroPython 將尋求釋放內(nèi)存中未使用或冗余的對象。這是一個通常以毫秒為單位的過程。或者,開發(fā)人員可以偶爾gc.collect()以預(yù)定的時間間隔運行以清理內(nèi)存,以確保垃圾收集不會在代碼的關(guān)鍵部分發(fā)生。

      語法差異可能是讓大多數(shù)開發(fā)人員陷入困境的差異類型,特別是如果您有任何重要的 CPython 經(jīng)驗,這可能會給您編程時帶來某種“肌肉記憶”。

      MicroPython 要求文字?jǐn)?shù)字和關(guān)鍵字之間有空格;相比之下,CPython 則不然。

      MicroPython 允許使用 := 賦值給理解變量;CPython 引發(fā)語法錯誤。

      使 Python 對編碼新手友好的設(shè)計特性之一是它處理數(shù)據(jù)類型(例如整數(shù)、布爾值、浮點數(shù))的方式。在 Python 中,所有數(shù)據(jù)類型都是類,變量是類的實例。然而,MicroPython 并沒有實現(xiàn)整個 CPython 對象數(shù)據(jù)模型。值得注意的差異包括缺少多重繼承、__new__ 和 __del__特殊方法可能不起作用、方法解析順序不同以及不支持元類。

      MicroPython 中未實現(xiàn)異常鏈接。因此,MicroPython 無法跨程序的不同抽象層重新拋出異常。

      內(nèi)置類型的處理方式不同。例如,MicroPython 不支持刪除數(shù)組。

      在 Python 中,函數(shù)是對象并且具有一組定義的屬性,可以通過函數(shù)調(diào)用訪問這些屬性。例如,所有函數(shù)都有一個內(nèi)置屬性__doc__,它返回函數(shù)源代碼中定義的文檔字符串。函數(shù)的用戶定義屬性在 CPython 中是可能的;但是,MicroPython 不支持它們。這樣做是因為嵌入式系統(tǒng)中通常會遇到內(nèi)存限制。

      覆蓋sys.stdin, sys.stdout, 和sys.stderr是不可能的。這些是解釋器用于標(biāo)準(zhǔn)輸入、輸出和錯誤的文件對象。這就是我們向用戶顯示文本并從用戶那里獲取輸入的方式。

      未能加載的模塊仍被注冊為已加載。這是為了使模塊處理更有效率。因此,加載不包含異常處理。在部署到生產(chǎn)環(huán)境之前,一定要在開發(fā)環(huán)境中測試代碼!

      該environ屬性未實現(xiàn)。相反,開發(fā)人員必須使用getenv()、putenv()和unsetenv() 方法來設(shè)置和獲取環(huán)境變量。請注意,該getenv() 方法只允許將一個參數(shù)傳遞給它。

      該print()函數(shù)不會像 CPython 那樣檢查遞歸數(shù)據(jù)結(jié)構(gòu)(例如,遞歸列表)。MicroPython 會檢查堆棧使用情況,因此打印遞歸數(shù)據(jù)結(jié)構(gòu)不會因堆棧溢出而導(dǎo)致崩潰。

      方法的錯誤消息可能會顯示意外的參數(shù)計數(shù),因為 MicroPython 將“self”計為參數(shù)。確保在處理錯誤消息時牢記這一事實。

      JSON(JavaScript 對象表示法)是一種流行的數(shù)據(jù)交換格式,許多物聯(lián)網(wǎng)終端設(shè)備使用它來與云高效通信。如果 JSON 對象不可序列化,MicroPython JSON 模塊不會拋出異常。

      該struct 模塊在 Python 值和表示為 Python 字節(jié)對象的 C 結(jié)構(gòu)之間進(jìn)行轉(zhuǎn)換。這允許有效處理存儲在文件中或來自傳感器常用的網(wǎng)絡(luò)連接或串行協(xié)議的二進(jìn)制數(shù)據(jù)。不幸的是,該struct.pack(format, v1, v2)函數(shù)不進(jìn)行檢查以確保為其提供了正確數(shù)量的參數(shù)。這與 CPython 實現(xiàn)形成對比,后者確實檢查參數(shù)計數(shù)。

      未實現(xiàn)在數(shù)組中搜索整數(shù)的功能。因此,以下代碼將導(dǎo)致錯誤:

      import array as array
      a = array.array('i', [1, 2, 3, 4])
      print(1 in a)

       

      CPython 會打印false,而 MicroPython 會返回未實現(xiàn)的錯誤消息。

      MicroPython 是一種功能強大且易于使用的編程語言,用于開發(fā)嵌入式應(yīng)用程序。但是,與用于創(chuàng)建桌面和云原生應(yīng)用程序的功能更豐富的 Python 實現(xiàn)相比,它是有限的。一些差異可能會在未來的 MicroPython 版本中得到修復(fù),或者隨著新功能被添加到 Python 的參考實現(xiàn)中,可能會出現(xiàn)新的差異。要查看 CPython 和 MicroPython 之間的最新差異,請務(wù)必在其網(wǎng)站上查看 MicroPython 的官方文檔。

      Tags:Python,MicroPython  
      責(zé)任編輯:admin
      請文明參與討論,禁止漫罵攻擊。 昵稱:注冊  登錄
      [ 查看全部 ] 網(wǎng)友評論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 国产成人综合久久精品下载| 九九久久99综合一区二区| 99久久综合精品免费| 久久久久高潮综合影院| 久久国产综合精品SWAG蓝导航| 国产亚洲综合久久| 亚洲五月综合缴情在线观看| 亚洲国产美国国产综合一区二区| 开心五月激情综合婷婷| 伊人久久大香线蕉综合5g| 亚洲另类激情综合偷自拍图| 亚洲heyzo专区无码综合| 综合三区后入内射国产馆 | 美腿丝袜亚洲综合| 97se色综合一区二区二区| 伊人色综合九久久天天蜜桃| 亚洲综合综合在线| 久久综合九色综合97免费下载 | 天天综合久久一二三区| 亚洲欧洲日韩国产综合在线二区 | 国产综合色香蕉精品五月婷| 伊人网综合在线视频| 国产亚洲精品第一综合| 人人妻人人狠人人爽天天综合网 | 狠狠色狠狠色综合伊人| 狠狠做深爱婷婷综合一区| 国产99久久亚洲综合精品| 色悠久久久久综合网香蕉| 色综合视频一区二区三区44| 亚洲国产亚洲综合在线尤物| 亚洲国产综合精品| 制服丝袜人妻综合第一页| 狠狠色成人综合网图片区| 色先锋资源久久综合5566| 精品综合久久久久久99| 一本大道久久a久久综合| 亚洲国产免费综合| 天天爽天天狠久久久综合麻豆| 亚洲综合熟女久久久30p| 伊人久久大香线蕉综合热线| 激情婷婷成人亚洲综合|