- 相關(guān)推薦
Python和JavaScript語(yǔ)言轉(zhuǎn)換的常用工具
選 Python 還是 JavaScript?雖然不少朋友還在爭(zhēng)論二者目前誰(shuí)更強(qiáng)勢(shì)、誰(shuí)又擁有著更為光明的發(fā)展前景,但毫無(wú)疑問(wèn),二者的競(jìng)爭(zhēng)在 Web 前端領(lǐng)域已經(jīng)擁有明確的答案。立足于瀏覽器平臺(tái),如果放棄 JavaScript,我們也就沒(méi)什么可選擇的項(xiàng)目了。
好吧,也許答案也不是這么絕對(duì)。JavaScript 已經(jīng)成為眾多其它編程語(yǔ)言爭(zhēng)相選擇的轉(zhuǎn)換目標(biāo)(相關(guān)實(shí)例包括 TypeScript、Emscripten、Cor 以及 Cheerp)。而 Python 則擁有龐大的追隨者群體,另外現(xiàn)有的強(qiáng)大庫(kù)資源則使其成為面向 JavaScript 的理想待轉(zhuǎn)換或者說(shuō)轉(zhuǎn)譯選項(xiàng)。
下面來(lái)看四個(gè)能夠順利將 Python 帶入 JavaScript 世界的項(xiàng)目; 而其中一款更是憑借著靈活的雙向轉(zhuǎn)換能力而鶴立雞群。
Transcrypt
這是一款新近崛起的 Python 到 JS 轉(zhuǎn)譯器。Transcrypt 對(duì)于自身所生成代碼的質(zhì)量水平做出了令人印象深刻的承諾。首先,它會(huì)盡可能多地保留原始的 Python 代碼結(jié)構(gòu),包括多重繼承以及 lambda 表達(dá)式。Python 源代碼也可以直接對(duì) JavaScript 中命名空間內(nèi)的對(duì)象進(jìn)行調(diào)用。如果大家嘗試訪(fǎng)問(wèn) Python 中的 document.getElementById,則轉(zhuǎn)換后的代碼也將在JavaScript 當(dāng)中切換使用 document.getElementById。
根據(jù)說(shuō)明文檔的介紹,Transcrypt 是利用 CPython 的抽象語(yǔ)法樹(shù)模塊完成這些轉(zhuǎn)譯任務(wù)的,其能夠根據(jù) Python 對(duì)自身代碼的解析方式進(jìn)行編程訪(fǎng)問(wèn)。盡管該項(xiàng)目目前仍處于 alpha 測(cè)試階段,但已經(jīng)顯示出了非常驚人的吸引力。
Jiphy
所謂 Jiphy,代表的是“JavaScript 入,Python 出”——也就是能夠?qū)Χ哌M(jìn)行雙向轉(zhuǎn)換。另外,來(lái)自?xún)煞N語(yǔ)言的代碼都能夠在被轉(zhuǎn)換為另一種語(yǔ)言之前進(jìn)行混合。
Jiphy 目前的最大短板在于其僅支持 Python 的一部分功能集。類(lèi)以及默認(rèn)參數(shù)尚不受支持,不過(guò)裝飾器與例外機(jī)制已經(jīng)可以正常使用。這主要是因?yàn)?Jiphy 堅(jiān)持在源代碼與目標(biāo)代碼之間采用行對(duì)行直接轉(zhuǎn)譯方式,不過(guò)其開(kāi)發(fā)人員也開(kāi)始著眼于 ES6 中的新功能,旨在將更多高級(jí) Python 功能納入支持范疇。
Brython
也許有一天,當(dāng) WebAssembly 設(shè)想成為現(xiàn)實(shí),那么我們將能夠選擇任何自己偏好的語(yǔ)言進(jìn)行 Web 開(kāi)發(fā)。而 Brython 對(duì)此——或者說(shuō)至少適用于 Python 3——有著自己的理解:為什么要等?
Brython 通過(guò)一套 JavaScript 庫(kù)對(duì) Python 3 中的全部關(guān)鍵字以及大多數(shù)內(nèi)置插件進(jìn)行模擬,從而實(shí)現(xiàn)了將 Python 3 版本作為客戶(hù)端 Web 編程方案的目標(biāo)。由 Python 編寫(xiě)的腳本可以被直接添加到網(wǎng)絡(luò)頁(yè)面當(dāng)中,而 Brython 還支持一套高級(jí) Python模塊界面(browser),用于同 DOM 進(jìn)行執(zhí)行協(xié)作,且該瀏覽器通?稍 JavaScript 中直接完成。
然而,Brython 也保持了瀏覽器給 JavaScript 代碼帶來(lái)的限制——例如不支持對(duì)本地文件系統(tǒng)進(jìn)行處理。
RapydScript
RapydScript 承諾“讓 Python 式 JavaScript 代碼不再糟糕。”該項(xiàng)目在概念上類(lèi)似于 CoffeeScript:以 Python 形式進(jìn)行代碼編寫(xiě),生成 JavaScript 代碼,并同時(shí)發(fā)揮二者的最佳特性。在 Python 方面,其擁有清晰的語(yǔ)法規(guī)則; 而在 JavaScript 方面,其擁有匿名函數(shù)、DOM 操作并能夠使用 jQuery 或者 Node.js 內(nèi)核等現(xiàn)有 JavaScript 庫(kù)。
【Python和JavaScript語(yǔ)言轉(zhuǎn)換的常用工具】相關(guān)文章:
Javascript函數(shù)的定義和用法分析08-15
JavaScript學(xué)習(xí)歷程和心得范文(精選10篇)02-13
對(duì)javascript的理解08-08
Javascript中arguments對(duì)象的詳解和使用方法08-20
JavaScript 小型打飛機(jī)游戲?qū)崿F(xiàn)和原理說(shuō)明08-18
常用的JavaScript模式09-22