谢邀。为什么Python很慢?由于各种原因,Python比Fortran和C慢:其中有一个很主要的原因是Python是动态类型而不是静态类型。 这意味着在程序执行时,解释器不知道定义的变量的类型。 此图表总结了C变量(我使用C作为编译语言的替代)和Python变量之间的区别: cint vs pyint对于C中的变量,编译器通过其定义知道类型。 对于Python中的变量,在程序执行时你所知道的只是它是某种Python对象。 因此,如果您在C中编写以下内容: C编译器从一开始就知道a和b是整数:它们根本不可能是其他任何东西! 有了这些知识,它可以调用添加两个整数的例程,返回另一个整数,这只是内存中的一个简单值。 作为粗略的原理图,事件序列如下所示: C加法
Python中的等效代码如下所示: 这里解释器只知道1和2是对象,但不知道它们是什么类型的对象。因此,解释器必须检查每个变量的PyObject_HEAD以找到类型信息,然后为这两种类型调用适当的求和例程。最后,它必须创建并初始化一个新的Python对象来保存返回值。事件序列看起来大致如下: Python加法
所有动态类型都意味着任何操作都涉及更多步骤,这是Python与数值数据操作相比较慢的主要原因。 我会在这里发布所有与科技、科学有关的有趣文章,欢迎订阅我的头条号。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论。 (码字不易,若文章对你帮助可点赞支持~) |
|