0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python的各种实现有何优劣

马哥Linux运维 来源:cg 2019-01-07 15:44 次阅读

当谈到Python时,一般指的是CPython。但Python实际上是一门语言规范,只是定义了Python这门语言应该具备哪些语言要素,应当能完成什么样的任务。这种语言规范可以用不同的方式实现,可以用C实现,也可以用C++JavaC#、JavaScript,甚至使用Python自己实现。这篇文章就是简要介绍并比较不同的Python实现,并且今后还会不断的扩充。

CPython

CPython是标准Python,也是其他Python编译器的参考实现。通常提到“Python”一词,都是指CPython。CPython由C编写,将Python源码编译成CPython字节码,由虚拟机解释执行。没有用到JIT等技术,垃圾回收方面采用的是引用计数。

所以当有人问道Python是解释执行还是编译执行,可以这样回答:Python(CPython)将Python源码编译成CPython字节码,再由虚拟机解释执行这些字节码。

如果需要广泛用到C编写的第三方扩展,或让大多数用户都能直接使用你的Python代码,那么还是使用CPython吧。

Jython

Jython在JVM上实现的Python,由Java编写。Jython将Python源码编译成JVM字节码,由JVM执行对应的字节码。因此能很好的与JVM集成,比如利用JVM的垃圾回收和JIT,直接导入并调用JVM上其他语言编写的库和函数。

对于想在JVM上使用Python简化工作流程,或者出于某些原因需要在Python语言中使用Java的相关代码,同时无需用到太多CPython扩展的用户来说,极力推荐Jython。

IronPython

IronPython与Jython类似,所不同的是IronPython在CLR上实现了Python,即面向.NET平台,由C#编写。IronPython将源码编译成TODO CLR,同样能很好的与.NET平台集成。即与Jython相同,可以利用.NET框架的JIT、垃圾回收等功能,能导入并调用.NET上其他语言编写的库和函数。IronPython默认使用Unicode字符串。

另外,Python Tools for Visual Studio可以将CPython和IronPython无缝集成进VS中。如果仅需要在Windows上开发较大的Python项目。条件允许的情况下,IronPython是个不错的选择。

PyPy

这里说的PyPy是指使用RPython实现,利用Tracing JIT技术实现的Python,而不是RPython工具链。PyPy可以选择多种垃圾回收方式,如标记清除、标记压缩、分代等。

想对于CPython,PyPy的性能提升非常明显,但对第三方模块的支持真心是弱爆了。比如无法很好的支持使用CPython的C API编写的扩展,完全不支持使用SWIG、SIP等工具编写的扩展。就连NumPy,也要在编译器的层面上从头实现。即使实现了,也只能在Python层面中使用,无法供其他第三方模块在非Python环境中使用。关于PyPy,后续会尝试用一篇完整的文章来介绍。不过我的这一篇文章中对PyPy和下面的Pyston有更详细的描述。

Pyston

Pyston由Dropbox开发,使用C++11编写,采用Method-at-a-time-JIT和Mark Sweep——Stop the World的GC技术。Pyston使用类似JavaScript V8那样的多层编译,其中也用到了LLVM来优化代码。Pyston正在发展中,还不成熟。但其前景是非常值得看好的(如果没像Google的Unladen Swallow那样死掉的话。话说,Google的东西现在是越来越不敢用了,不是他们的东西不好,是怕用着用着,他们就关掉了)。

总结

这里介绍了主要(其实是我接触过的,^_^)的几款Python实现,这几款Python实现可以满足大部分需要。而略过了几款,如Cython、Brython、RubyPython等。其实Cython还是挺有用的,不过现在接触的不多,不敢多写,看后面能不能抽时间补上。而Brython、RubyPython,个人感觉完全可以用JS或Ruby,没必要在一种动态语言的环境中再使用另一种动态语言。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4776

    浏览量

    68509
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84620

原文标题:各种 Python 实现的简单介绍与比较

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Prolith和HyperLith的优劣

    Prolith和HyperLith在光刻领域的优劣势,可以展开讨论讨论
    发表于 11-29 22:12

    如何使用Python实现PID控制

    PID控制(比例-积分-微分控制)是一种常见的反馈控制算法,广泛应用于工业控制系统中。在Python实现PID控制,我们可以遵循以下步骤: 1. 理解PID控制原理 PID控制器有三个主要参数
    的头像 发表于 11-14 09:09 406次阅读

    如何评判电子烟PCBA方案优劣

    如何评判电子烟方案优劣
    的头像 发表于 10-16 16:21 527次阅读
    如何评判电子烟PCBA方案<b class='flag-5'>优劣</b>

    实现有源逆变必须满足哪些条件

    实现有源逆变,即让一个电力电子装置在输出端产生与输入端电压同频率、同相位的电流,同时能够向电网回馈能量,需要满足一定的条件。以下是对实现有源逆变所需满足条件的分析。 1. 电压匹配条件 有源逆变器
    的头像 发表于 08-14 10:31 2110次阅读

    pytorch和python的关系是什么

    在当今的人工智能领域,Python已经成为了最受欢迎的编程语言之一。Python的易学易用、丰富的库和框架以及强大的社区支持,使其成为了数据科学、机器学习和深度学习等领域的首选语言。而在深度学习领域
    的头像 发表于 08-01 15:27 1863次阅读

    IR915怎么实现有线无线切换备份,有没有详细的操作步骤 ?

    怎么实现有线无线切换备份,有没有详细的操作步骤。
    发表于 07-25 08:17

    如何实现Python复制文件操作

    Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在这篇文章中,你将会看到一些用 Python 实现文件复制的特殊方法。下面我们开始学习这九种不同的方法来
    的头像 发表于 07-18 14:53 411次阅读

    使用Python进行自然语言处理

    在探讨使用Python进行自然语言处理(NLP)的广阔领域时,我们首先需要理解NLP的基本概念、其重要性、Python在NLP中的优势,以及如何通过Python实现一些基础的NLP任务
    的头像 发表于 07-04 14:40 440次阅读

    神经网络的基本原理及Python编程实现

    神经网络作为深度学习算法的基本构建模块,模拟了人脑的行为,通过互相连接的节点(也称为“神经元”)实现对输入数据的处理、模式识别和结果预测等功能。本文将深入探讨神经网络的基本原理,并结合Python编程实现进行说明。
    的头像 发表于 07-03 16:11 630次阅读

    如何使用Python生成四位随机数字

    为了实现这些目标,Python 为我们提供了random() 模块。random() 是一个内置的 Python 模块,用于生成随机数。
    的头像 发表于 04-15 12:47 646次阅读

    Raspberry Pi树莓派使用Python实现MQTT通信设计

    这次的例子,主要讲述如何基于PYTHON的 MQTT 客户端的使用方法
    的头像 发表于 03-14 11:45 794次阅读
    Raspberry Pi树莓派使用<b class='flag-5'>Python</b><b class='flag-5'>实现</b>MQTT通信设计

    通过Python脚本实现WIFI密码的自动猜解

    本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的自动猜解。
    的头像 发表于 01-25 10:46 3416次阅读
    通过<b class='flag-5'>Python</b>脚本<b class='flag-5'>实现</b>WIFI密码的自动猜解

    Python智能家居系统代码介绍

    Python智能家居系统是一种基于Python编程语言开发的智能家居控制系统,在现代家庭中得到了越来越广泛的应用。本文将详细介绍Python智能家居系统的代码实现,包括系统的结构与功能
    的头像 发表于 01-25 09:46 1347次阅读

    如何使用Python PySNMP模块获取设备指标呢?

    PySNMP 是一个跨平台的纯Python SNMP 引擎实现
    的头像 发表于 01-12 13:59 3002次阅读

    OM5光纤与现有多模光纤有区别?

    OM5光纤与现有多模光纤有区别? OM5光纤与现有多模光纤之间存在许多区别。OM5光纤是一种高性能光纤,用于多模光纤通信系统,而多模光纤是一般术语,可用于指代不同规范的光纤。本文将详细介绍OM5
    的头像 发表于 12-27 11:28 576次阅读