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随机生成数模块random使用实例
Apr 13 Python
使用Python的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
python中subprocess批量执行linux命令
Apr 27 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
对Python中画图时候的线类型详解
Jul 07 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
python定位xpath 节点位置的方法
Aug 27 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
keras实现多GPU或指定GPU的使用介绍
Jun 17 Python
python tqdm库的使用
Nov 30 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 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实现小型站点广告管理
2006/10/09 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
python中sets模块的用法实例
2014/09/30 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
Python异常处理知识点总结
2019/02/18 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
护理专业大学生自我推荐信
2014/01/25 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
村干部承诺书
2014/03/28 职场文书
热情服务标语
2014/10/07 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
春节慰问信范文
2015/02/15 职场文书
食品安全主题班会
2015/08/13 职场文书
创业计划书之养殖业
2019/10/11 职场文书
Golang流模式之grpc的四种数据流
2022/04/13 Golang
GPU服务器的多用户配置方法
2022/07/07 Servers