Python和JavaScript间代码转换的4个工具


Posted in Python onFebruary 22, 2016

选 Python 还是 JavaScript?虽然不少朋友还在争论二者目前谁更强势、谁又拥有着更为光明的发展前景,但毫无疑问,二者的竞争在 Web 前端领域已经拥有明确的答案。立足于浏览器平台,如果放弃 JavaScript,我们也就没什么可选择的项目了。

好吧,也许答案也不是这么绝对。JavaScript 已经成为众多其它编程语言争相选择的转换目标(相关实例包括 TypeScript、Emscripten、Cor 以及 Cheerp)。而 Python 则拥有庞大的追随者群体,另外现有的强大库资源则使其成为面向 JavaScript 的理想待转换或者说转译选项。

Python和JavaScript间代码转换的4个工具

下面来看四个能够顺利将 Python 带入 JavaScript 世界的项目; 而其中一款更是凭借着灵活的双向转换能力而鹤立鸡群。

Transcrypt

这是一款新近崛起的 Python 到 JS 转译器。Transcrypt 对于自身所生成代码的质量水平做出了令人印象深刻的承诺。首先,它会尽可能多地保留原始的 Python 代码结构,包括多重继承以及 lambda 表达式。Python 源代码也可以直接对 JavaScript 中命名空间内的对象进行调用。如果大家尝试访问 Python 中的 document.getElementById,则转换后的代码也将在JavaScript 当中切换使用 document.getElementById。

根据说明文档的介绍,Transcrypt 是利用 CPython 的抽象语法树模块完成这些转译任务的,其能够根据 Python 对自身代码的解析方式进行编程访问。尽管该项目目前仍处于 alpha 测试阶段,但已经显示出了非常惊人的吸引力。

Jiphy

所谓 Jiphy,代表的是“JavaScript 入,Python 出”——也就是能够对二者进行双向转换。另外,来自两种语言的代码都能够在被转换为另一种语言之前进行混合。

Jiphy 目前的最大短板在于其仅支持 Python 的一部分功能集。类以及默认参数尚不受支持,不过装饰器与例外机制已经可以正常使用。这主要是因为 Jiphy 坚持在源代码与目标代码之间采用行对行直接转译方式,不过其开发人员也开始着眼于 ES6 中的新功能,旨在将更多高级 Python 功能纳入支持范畴。

Brython

也许有一天,当 WebAssembly 设想成为现实,那么我们将能够选择任何自己偏好的语言进行 Web 开发。而 Brython 对此——或者说至少适用于 Python 3——有着自己的理解:为什么要等?

Brython 通过一套 JavaScript 库对 Python 3 中的全部关键字以及大多数内置插件进行模拟,从而实现了将 Python 3 版本作为客户端 Web 编程方案的目标。由 Python 编写的脚本可以被直接添加到网络页面当中,而 Brython 还支持一套高级 Python模块界面(browser),用于同 DOM 进行执行协作,且该浏览器通常可在 JavaScript 中直接完成。

然而,Brython 也保持了浏览器给 JavaScript 代码带来的限制——例如不支持对本地文件系统进行处理。

RapydScript

RapydScript 承诺“让 Python 式 JavaScript 代码不再糟糕。”该项目在概念上类似于 CoffeeScript:以 Python 形式进行代码编写,生成 JavaScript 代码,并同时发挥二者的最佳特性。在 Python 方面,其拥有清晰的语法规则; 而在 JavaScript 方面,其拥有匿名函数、DOM 操作并能够使用 jQuery 或者 Node.js 内核等现有 JavaScript 库。

Python 相关文章推荐
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
Python中垃圾回收和del语句详解
Nov 15 Python
python实现朴素贝叶斯算法
Nov 19 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
python字符串反转的四种方法详解
Dec 02 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
详解python中的lambda与sorted函数
Sep 04 Python
python简单实现插入排序实例代码
Dec 16 Python
python实现层次聚类的方法
Nov 01 Python
python实现识别相似图片小结
Feb 22 #Python
python脚本设置系统时间的两种方法
Feb 21 #Python
python脚本设置超时机制系统时间的方法
Feb 21 #Python
Go语言基于Socket编写服务器端与客户端通信的实例
Feb 19 #Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 #Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 #Python
Python实现以时间换空间的缓存替换算法
Feb 19 #Python
You might like
如何用PHP做到页面注册审核
2017/03/02 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
jquery中radio checked问题
2015/03/16 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
python清除函数占用的内存方法
2018/06/25 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
基于python中__add__函数的用法
2019/11/25 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
人事主管的岗位职责
2013/11/16 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
物流管理专业自荐信
2014/06/23 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
河童之夏观后感
2015/06/11 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript