Python程序慢的重要原因


Posted in Python onSeptember 04, 2020

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代码

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

解释器只知道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<int, int>(a, b)

  • a->PyObject_HEAD获取类型编码
  • a是一个整型;值为a->val
  • b->PyObject_HEAD获取类型编码
  • b是一个整型,值为b->val
  • 调用binary_add<int, int>(a->val, b->val)
  • 结果为整型,存在result中

创建对象c

设c->PyObject_HEAD->typecode为整型

设置c->val为result

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

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

Python 相关文章推荐
Python中unittest用法实例
Sep 25 Python
python自动格式化json文件的方法
Mar 11 Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
Python中字典和集合学习小结
Jul 07 Python
Python实现简单的语音识别系统
Dec 13 Python
Python AES加密实例解析
Jan 18 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
python dumps和loads区别详解
Feb 04 Python
Python MySQL 日期时间格式化作为参数的操作
Mar 02 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 #Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 #Python
Django实现微信小程序支付的示例代码
Sep 03 #Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 #Python
一篇文章搞懂python的转义字符及用法
Sep 03 #Python
容易被忽略的Python内置类型
Sep 03 #Python
python类共享变量操作
Sep 03 #Python
You might like
php将字符串转换成16进制的方法
2015/03/17 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python实现simhash算法实例
2014/04/25 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
python实现定时发送qq消息
2019/01/18 Python
详解Python是如何实现issubclass的
2019/07/24 Python
Pytorch之contiguous的用法
2019/12/31 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
python实现处理mysql结果输出方式
2020/04/09 Python
python访问hdfs的操作
2020/06/06 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
90后毕业生的求职信范文
2013/09/21 职场文书
护士自荐信怎么写
2013/10/18 职场文书
销售演讲稿范文
2014/01/08 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
实习评语大全
2014/04/26 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
2014年科研工作总结
2014/12/03 职场文书
见义勇为事迹材料
2014/12/24 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
求职导师推荐信范文
2015/03/27 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python