今天,我知道通过任何算法问题,pypy3的input()时间都比python3快
性能差异几乎高达12倍!!
让我知道为什么会有这种区别。
答案 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语言实现很少。
答案 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中的垃圾回收器不同,因此语义上的差异很小