百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

动态类型是如何一步步拖慢你的python程序的

off999 2025-06-23 21:20 3 浏览 0 评论

杂谈

人人都知道python慢,这都变成了人尽皆知的事情了,但你知道具体是什么拖慢了python的运行吗?

动态类型肯定要算一个!

动态类型,能够提高开发效率,能够让我们更加专注逻辑开发,使得编程更加灵活。

a = 1
a = 'a'
a = 2.3

你完全不需要定义变量的类型,尽管写代码即可,解释器将动态判断变量的类型。

当然,有了动态类型,肯定有一种静态类型与之对应,很多很多语言都是静态的,比如 C、JAVA、C#、C++等等,它们的特点是要强制确定变量类型。

// C
int a = 1;

一、慢性毒药——类型检查

静态类型的语言中,每个类型检查在编译期就已经确定了;而python在运行过程中才会确定类型,而且每次变量被访问,都需要确定当前类型才能进一步执行,这都需要 CPU 参与进来。

这就像两种流水线,一条静态类型的流水线仅需要一次检查即可;另一条动态类型的流水线,每次货物来了都需要安排人去检查,这肯定会影响性能。

不同的流水线工作方式

特别是在密集的计算过程中,会进行大量的 类型检查,那么计算性能就会变得很差,这就是为什么很多计算库都通过 C、C++或其它编译型静态语言 来实现的重要原因。

二、优化壁垒——无法进行静态优化

静态类型的语言可以通过一些手段,来优化代码,以此来提升程序的性能,比如 循环展开、死代码消除、常量传播等

但是动态类型的语言就很难做到提前优化来提升性能,它必须在运行期间才能知道类型,就没法做到以上的那些操作。

这就像静态类型语言在考试前先把试卷的 所有问题看一遍,然后再做答;但动态类型语言就像真正的 闭卷考试,所有问题只有答题时才能知道。

提前知道考题,做题速度当然快

三、天生的胖子——内存开销大

静态类型的语言,丁是丁,卯是卯,一个 int 类型该是4字节就是4字节。

但python的动态类型可不是,要知道python是一个 纯面向对象 的语言,所有东西都是对象,它并不是纯粹的数据类型,这将消耗额外的内存来存储对象。

这就说明python是天生的胖子,它的内存消耗天然就是要大。

python天然的内存消耗大

四、优化思路

4.1 使用JIT编译器

我们可以用 JIT技术 来运行程序,提高性能,比如 PyPy,下载后直接用它进行运行:

pypy your_script.py

关于JIT技术本文不阐述,以后再开篇文章来说!

4.2 计算密集型使用性能更佳的库

当你需要执行大量计算,不要使用python原生的计算方式,采用 numpy、scipy 等库来执行将跳过动态类型检查,提升性能。

4.3 使用静态类型语言开发结合python

这个操作适合大佬,直接使用 Cython 来开发,结合python使用。

五、总结

很多人看到这里可能都不敢用python了,其实不用担心,我们一般情况下是用不到性能瓶颈的,依赖于现在日益强大的硬件,很多程序都能流畅运行。

动态类型虽然性能上打了折扣,但是实在在提高了开发效率,能够更加快速地实现我们的想法,正所谓 鱼和熊掌不可兼得,有牺牲肯定有回报。

相关推荐

编写更多 pythonic 代码(十三)——Python类型检查

一、概述在本文中,您将了解Python类型检查。传统上,类型由Python解释器以灵活但隐式的方式处理。最新版本的Python允许您指定显式类型提示,这些提示可由不同的工具使用,以帮助您更...

[827]ScalersTalk成长会Python小组第11周学习笔记

Scalers点评:在2015年,ScalersTalk成长会完成Python小组完成了《Python核心编程》第1轮的学习。到2016年,我们开始第二轮的学习,并且将重点放在章节的习题上。Pytho...

用 Python 画一颗会跳动的爱心:代码里的浪漫仪式感

在编程的世界里,代码不仅是逻辑的组合,也能成为表达情感的载体。今天我们就来聊聊如何用Python绘制一颗「会跳动的爱心」,让技术宅也能用代码传递浪漫。无论是写给爱人、朋友,还是单纯记录编程乐趣,这...

Python面向对象编程(OOP)实践教程

一、OOP理论基础1.面向对象编程概述面向对象编程(Object-OrientedProgramming,OOP)是一种编程范式,它使用"对象"来设计应用程序和软件。OOP的核心...

如何在 Python 中制作 GIF(python做gif)

在数据分析中使用GIF并发现其严肃的一面照片由GregRakozy在Unsplash上拍摄感谢社交媒体,您可能已经对GIF非常熟悉。在短短的几帧中,他们传达了非常具体的反应,只有图片才能传达...

Python用内置模块来构建REST服务、RPC服务

1写在前面和小伙伴们分享一些Python网络编程的一些笔记,博文为《PythonCookbook》读书后笔记整理博文涉及内容包括:TCP/UDP服务构建不使用框架创建一个REST风格的HTTP...

第七章:Python面向对象编程(python面向对象六大原则)

7.1类与对象基础7.1.1理论知识面向对象编程(OOP)是一种编程范式,它将数据(属性)和操作数据的函数(方法)封装在一起,形成一个称为类(Class)的结构。类是对象(Object)的蓝图,对...

30天学会Python编程:8. Python面向对象编程

8.1OOP基础概念8.1.1面向对象三大特性8.1.2类与对象关系核心概念:类(Class):对象的蓝图/模板对象(Object):类的具体实例属性(Attribute):对象的状态/数据方法...

RPython GC 对象分配速度大揭秘(废土种田,分配的对象超给力)

最近,对RPythonGC的对象分配速度产生了浓厚的兴趣。于是编写了一个小型的RPython基准测试程序,试图探究它对象分配的大致速度。初步测试与问题发现最初的设想是通过一个紧密循环来分配实...

30天学会Python编程:2. Python基础语法结构

2.1代码结构与缩进规则定义与原理Python使用缩进作为代码块的分界符,这是Python最显著的特征之一。不同于其他语言使用大括号{},Python强制使用缩进来表示代码层次结构。特性与规范缩进量...

Python 类和方法(python类的方法与普通的方法)

Python类和方法Python类创建、属性和方法具体是如何体现的,代码中如何设计,请继续看下去。蟒蛇类解释在Python中使用OOP?什么是Python类?Python类创建Pyt...

动态类型是如何一步步拖慢你的python程序的

杂谈人人都知道python慢,这都变成了人尽皆知的事情了,但你知道具体是什么拖慢了python的运行吗?动态类型肯定要算一个!动态类型,能够提高开发效率,能够让我们更加专注逻辑开发,使得编程更加灵活。...

用Python让图表动起来,居然这么简单

我好像看到这个emoji:动起来了!编译:佑铭参考:https://towardsdatascience.com/how-to-create-animated-graphs-in-python-bb6...

Python类型提示工程实践:提升代码质量的静态验证方案

根据GitHub年度开发者调查报告,采用类型提示的Python项目维护成本降低42%,代码审查效率提升35%。本文通过9个生产案例,解析类型系统在工程实践中的应用,覆盖API设计、数据校验、IDE辅助...

Python:深度剖析实例方法、类方法和静态方法的区别

在Python中,类方法(classmethod)、实例方法(instancemethod)和静态方法(staticmethod)是三种不同类型的函数,它们在使用方式和功能上有一些重要的区别。理...

取消回复欢迎 发表评论: