Python静态键入变量

时间:2018-10-27 19:29:36

标签: python python-3.x performance

Python是动态类型的,因此它可以存储不同的类型。这使代码更易于编写,但速度也较慢。

我知道像Cython这样的东西存在。但是,是否可以仅使用python(内置函数或某些库)来允许我们使用静态类型变量,以使代码运行更快?

3 个答案:

答案 0 :(得分:1)

  

Python是动态类型的,因此它可以存储不同的类型。这使代码更易于编写,但速度也较慢。

您似乎认为Python的动态特性 很慢。我想说这是一个基本的误解:速度和性能不是该语言的特征,而是其实现的特征。是的,一种语言的属性可能使编写高效的实现变得更容易或更困难-但这仅对那些实现该语言的人很重要。

作为示例,存在几种非常快速的JavaScript实现。简而言之,一些非常聪明的人付出了很多努力才能使性能发挥出一点点点滴滴滴-尽管由于语言的特质及其高度动态的特性,这样做非常困难。结果,许多人现在将其视为一种“快速”语言。

那么,为什么Python变慢?可能是因为您使用的是CPython的参考实现,它确实是一个相当慢且直接的解释器。另一方面,PyPy提供了一种现代的即时编译器,可以使原始的重复性Python代码更快地运行。

哦,无论现在还是不提前进行编译,如今,甚至“快速”语言的实现也执行许多技巧。 C编译器或JVM如何使代码快速运行并没有直接意义。

(卢阿可能是另一回事,但我对此并不了解。)

答案 1 :(得分:0)

NumPy包是静态类型[1]。而且,与Python 2相比,NumPy支持更多的数据类型。

[1]:Chin,L,Dutta,T. NumPy Essentials(Kindle位置360)。 Packt出版。 Kindle版。

答案 2 :(得分:0)

根据this blog,在许多情况下,您可以通过更加详细地说明您的类及其数据成员,并使用支持JIT的实现(例如PyPy)来提高速度。因此,根据博客作者的说法,您可以更好地指定您的班级,例如:

class Rectangle(object):
    __slots__ = ('x', 'y', 'width', 'height')

    def __init__(self, x, y, width, height):
        self.x, self.y, self.width, self.height = x, y, width, height

这将使代码的运行速度稍快一些,因为根据python的实现,解释器可能会将此信息用于使用更好的基础数据结构。