python3和pypy3有什么区别

时间:2019-11-26 12:11:58

标签: python-3.x pypy

今天,我知道通过任何算法问题,pypy3的input()时间都比python3快 性能差异几乎高达12倍!!
让我知道为什么会有这种区别。

4 个答案:

答案 0 :(得分:3)

CPython 它是用C和C ++编写的python语言的解释器。解释器将python代码(由人类编写并且可以由人类读取)转换为机器代码(可以由机器/计算机读取/理解)。此过程涉及多个步骤。

CPython是用C语言编写的Python的参考实现。它将Python代码编译为中间字节码,然后由虚拟机解释。 CPython提供了与Python包和C扩展模块的最高级别的兼容性。

如果您正在编写开放源代码的Python代码,并希望吸引尽可能多的读者,则以CPython为最佳选择。要使用依赖于C扩展的程序包,CPython是您唯一的实现选项。

由于CPython是参考实现,因此所有版本的Python语言都使用C语言实现。

PyPy

这是用于RPython编写的python语言的JIT编译器。 JIT编译器执行需要编译的代码,即JIT在运行时在执行之前编译代码。

PyPy是在称为RPython的Python语言的受限静态类型子集中实现的Python解释器。解释器具有即时编译器,并支持多个后端(C,CLI,JVM)。

PyPy旨在与参考CPython实现实现最大兼容性,同时提高性能。

如果您想提高Python代码的性能,值得尝试一下PyPy。根据一系列基准测试,它目前比CPython快5倍以上。

PyPy支持Python 2.7。 Beta版发布的PyPy3 [1]针对Python 3。

答案 1 :(得分:2)

我假设当您说Latitude Longitude Trailer_id Odometer_reading_diff 45.574053 -73.897317 AB61a1 25.8697 45.584057 -73.875877 AB61a1 0.2545 45.597181 -73.865397 AB61a1 0 45.597180 -73.865398 AB61a1 13.4141 时,您的意思是python3,它是python语言的默认且广泛使用的实现。

CPython

它是用CPython编写的python语言的解释器。解释器将python代码(由人类编写并且可以由人类读取)转换为机器代码(可以由机器/计算机读取/理解)。此过程涉及多个步骤。

PyPy

这是用C and C++编写的python语言的JIT编译器。 JIT编译器执行需要编译的代码,即JIT在运行时在执行之前编译代码。

处理这两种实现的python代码的这种不同方法是int速度不同的原因。下面的链接将为您提供更多详细信息。

旨在实现不同目标的Python语言实现很少。

CPython

PyPy

JIT

Design of CPython’s Compiler

PyPy

Alternatives

答案 2 :(得分:1)

请检查一下, 当我们谈论Python编程语言时,我们通常不仅指该语言,还指其实现。 Python是一种语言规范,可以通过多种不同方式实现。

Python编程语言的默认实现为 Cpython(假设python3表示Cpython)。顾名思义,Cpython是用C语言编写的。 Cpython将python源代码编译为中间字节码,该字节码由Cpython虚拟机执行。

Jython 是可以在Java平台上运行的Python编程语言的实现。 Jython程序使用Java类而不是Python模块。 Jython编译为Java字节码,然后可以由Java虚拟机运行。

PyPy 如果您想让代码运行得更快,则应该只使用PyPy。 — Guido van Rossum(Python的创建者) Python是一种动态编程语言。据说Python速度很慢,因为默认的CPython实现以字节码形式编译python源代码,这比机器代码(本机代码)慢。 PyPy进来了。

PyPy是用Python编写的Python编程语言的实现。解释器是用RPython(Python的子集)编写的。 PyPy使用(及时编译)。简而言之,JIT使用编译方法使解释器系统更高效,更快速。因此,基本上,JIT可以将源代码编译为本机代码,从而使其非常快。 PyPy还默认支持无堆栈模式,提供微线程以实现大规模并发。据说Python比Cpython快7.5倍。

希望这会对您有所帮助。

答案 3 :(得分:1)

差异:

1.PyPY内置了JIT编译器,这意味着PyPY可以比CPython(标准版本)快得多-我的数学应用程序之一在PyPy下要快10倍。

2.PyPy没有GIL(它使用不同的垃圾收集机制),这意味着它在多线程处理方面更胜一筹

3.PyPy目前仅与Python 3.6兼容-通常比标准Python至少晚6个月

4.PyPy不支持扩展模块使用的完整API,因此某些第三方扩展模块根本无法工作。例如,必须仅为PyPy创建Numpy的特殊版本。

5。由于PyPy中的垃圾回收器不同,因此语义上的差异很小