• 技术文章 >后端开发 >Python教程

    为什么python慢

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-06-25 16:07:50原创1170
    Python是一种动态类型,解释性的语言,对于很多开发者来说,Python运行慢是众所周知的事情,其万物皆对象的特性,就是导致其运行慢的一个原因,下面将从三个方面来分析Python慢的原因。

    php入门到就业线上直播课:进入学习

    动态类型

    Python是动态类型而不是静态类型的,这意味着,在程序执行时,解释器并不知道变量的类型。对C语言来说,编译器在声明变量的时候就知道其类型了;对Python来说,程序执行时只知道一个变量是某种Python对象。

    对于下面的C代码

    int a = 1;
    int b = 2;
    int c = a + b;

    编译器始终知道a和b是整型,在执行相加运算时,流程如下:

    把<int> 1赋值给a

    把<int> 2赋值给b

    调用binary_add<int, int>(a, b)

    把结果赋值给c

    实现同样功能的Python代码如下:

    a = 1
    b = 2
    c = a + b

    相关推荐:《Python视频教程

    解释器只知道1和2是对象,但是并不知道这个对象的类型。所以解释器必须检查每个变量的PyObject_HEAD才能知道变量类型,然后执行对应的相加操作,最后要创建一个新的Python对象来保存返回值,大致流程如下:

    第一步,把1赋值给a

    1.设置a->PyObject_HEAD->typecode为整型

    2.设置a->val = 1

    第二步,把2赋值给b

    1.设置a->PyObject_HEAD->typecode为整型

    2.设置b->val = 2

    第三步,调用binary_add<int, int>(a, b)

    1.a->PyObject_HEAD获取类型编码

    2.a是一个整型;值为a->val

    3.b->PyObject_HEAD获取类型编码

    4.b是一个整型,值为b->val

    5.调用binary_add<int, int>(a->val, b->val)

    6.结果为整型,存在result中

    第四步,创建对象c

    1.设c->PyObject_HEAD->typecode为整型

    2.设置c->val为result

    动态类型意味着任何操作都会涉及更多的步骤。这是Python对数值操作比C语言慢的主要原因

    Python是解释型语言

    上面介绍了解释型代码和编译型代码的一个区别。智能的编译器可以提前预见并优化重复或不需要的操作,这会带来性能的提升。编译器是一个大的话题,这里不会展开。

    Python的对象模型会带来低效的内存访问

    和C语言的整数对比时,我们指出了Python多了额外一层信息。现在来看看数组的情况。在Python中我们可以使用标准库中提供的List对象;而在C语言中我们会使用基于缓冲区的数组。

    最简单的NumPy数组是围绕C数据构建的Python对象,也就是说它有一个指向连续数据缓存区的指针。而Python的list具有指向连续的指针缓冲区的指针,这些指针每个都指向一个Python对象,结合上面的例子,这些Python对象是一个整数对象。这个结构像下面这样

    很容易看出,如果你正在执行按顺序逐步完成数据的操作,numpy的内存布局比Python的内存布局更为高效,无论是存储成本还是访问的时间成本。

    以上就是为什么python慢的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:python
    上一篇:anaconda和python区别 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 如何用python做游戏• 怎么用python进行加法运算• python可变类型和不可变类型区别• python函数重写怎么理解
    1/1

    PHP中文网