python越来越作为一种科学技术研究的语言越来越流行,可是我们经常听到一个问题,python是慢的。那么我们从后台分析一下,为什么python是慢的。 python是一种动态类型,解释型语言,它的值都是存储在分散的对象中,而不是紧密的缓存之中。
1.python是动态类型语言
这意味着编译器在程序执行之前并不知道变量定义的类型。C定义变量和Python定义变量的方式的区别: 对于C,编译器通过定义知道变量的类型;然而对于python中的变量,当你知道变量的类型的时候已经是程序执行的时候了。 我们分析一小段代码分别在python和C中执行的具体区别: 在C中,如果你写如下代码:
int a = 1;
int b = 2;
int c = a + b;
1.分配一个类型1给a 2.分配一个类型2给b 3.调用一个二进制加法<int,int>(a,b) 4.将结果分配给c
在python中,同样的
a = 1
b = 2
c = a + b
1.分配1给a
-
设置一个对象,然后将它的类型设置为整数
-
将它的值设为1 2.分配2给b
-
设置一个对象,然后将它的类型设置为整数
-
将它的值设为2 3.调用一个二进制加法(a,b)
-
寻找一个类型在对象中
-
a是一个整数,它的值是a
-
寻找一个类型在对象中
-
b是一个整数,它的值是b
-
调用一个二进制加法
-
返回结果,结果是一个整数 4.产生一个对象c
-
将一个对象的类型设置为整数
-
将它的值分配给结果 动态类型意味着每一步操作需要更多的步骤。python比c慢的一个基本的原因就是数字计算上面的操作。
2.python是一种解释型的语言而不是编译型的
我们可以看到解释型语言和编译型语言的区别。一个聪明的编译器知道怎么提前优化,避免重复和不必要的操作,从而提高效率。当然,在这一点上也是仁者见仁智者见智。
3.python的对象模型导致存储效率低下
python存储数据效率低下的原因,主要可以从下图看出:
当然说了python这么多缺点,为什么python用的人还这么多,因为它很简单啊。python用起来的确很简单,就我个人的使用感受而言,除了matlab,我没有看过比python还要简单的语言了。而且python的开源的库很多,所以做很多东西都很方便。