Python慢的重要原因:

1、python是动态性语言不是静态性语言

在python程序执行的时候,编译器不知道变量的类型。

2、python是解释性语言而不是编译性语言

解释型语言与编译型语言它们本身的区别也会造成程序在执行的时候的速度差异。一个智能化的编译器可以预测并针对重复和不需要的操作进行优化。这也会提升程序执行的速度。

3、 python的对象模型会导致访问内存效率低下

相对于C语言,在python中对整数进行操作会有一个额外的类型信息层。

当有很多的整数并且希望进行某种批操作时,在python中往往会使用一个list,而在C中会使用某个基于缓存区的数组。

内容扩展:

Python一种动态类型,解释性的语言,对于很多开发者来说,Python运行慢是众所周知的事情,其万物皆对象的特性,就是导致其运行慢的一个原因,这篇文章就是想聊聊这里面的一些细节。

慢的原因

由于各种原因,Python比Fortran和C语言慢。

动态类型

Pythn是动态类型而不是静态类型的,这意味着,在程序执行时,解释器并不知道变量的类型。下图可以用来说明C变量和Python变量的区别

对C语言来说,编译器在声明变量的时候就知道其类型了;对Python来说,程序执行时只知道一个变量是某种Python对象。

对于下面的C代码

?

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

把 1赋值给a

把 2赋值给b

调用binary_add(a, b)

把结果赋值给c

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

?

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

把1赋值给a

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

设置a->val = 1

把2赋值给b

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

设置b->val = 2

调用binary_add(a, b)

a->PyObject_HEAD获取类型编码

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

b->PyObject_HEAD获取类型编码

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

调用binary_add(a->val, b->val)

结果为整型,存在result中

创建对象c

设c->PyObject_HEAD->typecode为整型

设置c->val为result

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

到此这篇关于Python程序慢的重要原因的文章就介绍到这了,更多相关Python慢的重要原因内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.py.cn/faq/python/18442.html

python程序跑得慢_Python程序慢的重要原因相关推荐

  1. 怎么看python程序卡在哪里_Python程序卡住了

    我是 Python新手,我正在编写一个程序只是为了好玩.我的程序包含三个.py文件(假设是a.py,b.py,c.py). a将调用b或c中的函数,具体取决于用户的选项.完成第一轮后,它会询问用户是想 ...

  2. python库有什么用_Python程序员必知什么 常用的Python库有哪些

    Python程序员必知什么?常用的Python库有哪些?Python有很多丰富而强大的库,这是它成为人工智能与数据分析领域强者的关键.有很多Python开发人员想知道常用的Python库有哪些,接下来 ...

  3. 单片机长时间程序跑飞_单片机程序跑飞的三种现象、原因及解决方法

    今天在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象.原因及解决方法. 一.数组越界(数组溢出 ...

  4. 下面哪个不是python常用的开发工具_Python程序员常用的IDE和其它开发工具

    概述 "工欲善其事,必先利其器",如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了. IDE的全称是Integration Development Environment ...

  5. python程序格式框架的描述_python 程序语言设计(嵩天)-学习笔记(第二章python 程序实例解析)...

    第 2 章 python 程序实例解析 学习目标: 掌握解决计算问题的一般方法. 掌握python语言的基本语法,包括缩进.变量.命名等. 掌握python语言绘制图形的一般方法. 了解python标 ...

  6. python打包exe报错_python 程序打包为 windows 可执行程序 exe

    1,使用到的程序 1,python 2,pyinstaller 2,安装 pyinstaller pip install pyinstaller 3,安装可能出现的问题与报错 1:AttributeE ...

  7. python做公司内部系统错误_Python程序可能导致文件系统错误?

    概述: 你好.我有一个python程序,在9-5小时之间控制一个运动传感器.该程序在树莓派上运行,存储在带有西方人v2.1 Debian OS的SD媒体上.该计划在很大程度上依赖于time.sleep ...

  8. python界面开发工具免费_Python程序员必备的四款开发工具

    原标题:Python程序员必备的四款开发工具 Python自学与交流中心QQ群:260308621 大家今晚利用1个小时看python基础视频教程 23-27节 ,自己监督自己.跟着学习哈!一定要做到 ...

  9. python程序设计基础实战教程_Python程序设计基础实战教程

    第1章 Python概述 1.1 Python的诞生 1.2 Python的特点 1.3 Python能做什么? 1.3.1 Python常规应用 13.2 Python在大数据时代下的应用 1.4 ...

最新文章

  1. 灾难恢复级别_如何实施云计算灾难恢复
  2. Meanshift解析
  3. 鸟哥的Linux私房菜(服务器)- 主机基本安全之一:限制 Linux 对外连线的端口
  4. 反距离加权插值法例题_GMS插值中的反距离权重法(Inverse distance weighted)
  5. php开启与关闭错误提示
  6. css 实现div阴影,上下移动
  7. [2020.11.25NOIP模拟赛]下棋【dp】
  8. Jackson第一篇【JSON字符串、实体之间的相互转换】
  9. pytorch 解压kaggle中的zgz文件
  10. 2019/3/14 软工作业
  11. 二叉树的基本操作(C)
  12. Axios插件和loading的实现
  13. LinkedList的源码分析(基于jdk1.8)
  14. python 图像扭曲 opencv仿射变换 cv2.getAffineTransform() cv2.warpAffine()应用实例
  15. Windows开源Web服务器性能和压力测试工具
  16. YOLO v5 检测摄像头但却不显示检测图像 一招拿下
  17. 验证码 图片无法刷新
  18. 《Oracle Java EE编程自学和面试指南》09-02:HttpSession接口
  19. verbose=True
  20. php德育元素,的人如何使用tpl.php文件主题化drupal表单

热门文章

  1. squid启动失败的解决办法
  2. Twitter Storm常见模式
  3. eclipse中动态web项目快捷方式设置
  4. Spring Boot + BeetlSQL + H2数据库项目整合
  5. 8月份Github上最热门的Python开源项目
  6. jupyter和matlab的配置
  7. python绘制可多角度查看的3d图像
  8. 【分享】在线解析微信h5网页标签跳转到手机默认浏览器的实现方式
  9. (Eclipse)(STM32) STM32在Eclipse編程
  10. ●洛谷P3168 [CQOI2015]任务查询系统