Python程序慢的重要原因
作者:Ly 发布时间:2023-10-08 16:17:40
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语言慢的主要原因
来源:https://www.py.cn/faq/python/18442.html


猜你喜欢
- 本文实例讲述了Python实现文件内容批量追加的方法。分享给大家供大家参考,具体如下:#coding:utf-8import os#----
- 什么是钩子之前有转一篇关于回调函数的文章钩子函数、注册函数、回调函数,他们的概念其实是一样的。 钩子函数,顾名思义,就是把我们自己实现的ho
- 本文实例讲述了Python文件与文件夹常见基本操作。分享给大家供大家参考,具体如下:1、判断文件(夹)是否存在。os.path.exists
- 今天因为给BeauBeau提供的抽奖号码做SQL文件,一开始收到ZIP文件解开压缩之后被吓到了——29个CSV文件,每个文件保存了1000个
- 当前的实践中问题在项目之间依赖的时候我们往往可以通过mock一个接口的实现,以一种比较简洁、独立的方式,来进行测试。但是在mock使用的过程
- 效果图:(灰色区域可拖动)代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
- 本文实例为大家分享了基于Tensorflow的MNIST手写数字识别分类的具体实现代码,供大家参考,具体内容如下代码如下:import te
- 为了把事情变成简单化,我在多个Oracle数据上建立统一的检查数据库账户,并且账户只能访问特定的几个视图(需要查询的sql已生成视图),具体
- 在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。正则表达式的大致匹配过程是:1.依
- 使用本Activation code需要jetbrains-agent支持!插件Activation code:06KU174Y5C-eyJ
- 本文实例讲述了Python实现判断字符串中包含某个字符的判断函数。分享给大家供大家参考,具体如下:#coding=utf8#参数包含两个:#
- 在日常的测试工作中,我们的测试用例一般都是保存在Excel文件中,当然也有一些公司会使用Xmind来编写测试用例,那么为什么我们在这里只是讲
- 惊现!表面下的隐藏信息——浅谈信息可视化1910年,病卧床上的魏格那(德国气象学家,以“大陆漂移学说”闻名),无意地注视着墙上的世界地图……
- 登陆万事开头难,做什么事都要有个起点,后面才能更好的进行下去,因此我选择的起点就是最为直观的登陆页面 /login/index.vue/sr
- 本文实例讲述了PHP基于rabbitmq操作类的生产者和消费者功能。分享给大家供大家参考,具体如下:注意事项:1、accept.php消费者
- 目录先看演示像类一样的访问属性类似字典的访问为什么可以这样?源码解析为什么有类的影子?为什么有字典的影子?先看演示像类一样的访问属性from
- 科讯sql商业版中用到的ajax空间与分页函数,他们的js代码学习是非常不错的//ajax 控件 function Pa
- 前言本文提供将图片色彩转为黑白或者褐色风格。比较类似于我们在看动漫、影视作品中,当人物在回忆过程中,体现出来的画面一般都是黑白或者褐色的。环
- 一、元素偏移量 offset 系列offset 翻译过来就是偏移量, 我们使用 offset 系列相关属性可以动态的得到该元素的位置(偏移)
- 关于python的ssh库操作需要引入一个远程控制的模块——paramiko,可用于对远程服务器进行