这七个100%提高Python代码性能的技巧,一定要知道

news2024/9/22 21:15:16

B站|公众号:啥都会一点的研究生

相关阅读

整理了几个100%会踩的Python细节坑,提前防止脑血栓
整理了十个100%提高效率的Python编程技巧,更上一层楼
Python-列表,从基础到进阶用法大总结,进来查漏补缺
Python-元组,从基础到进阶用法大总结及与列表核心区别,进来查漏补缺
Python-字典,从基础到进阶用法大总结,进来查漏补缺
Python-集合,从基础到进阶大总结,进来查漏补缺
这些包括我在内都有的Python编程陋习,趁早改掉
Python可变类型的坑,不要再踩了
列表推导式,Python中最好的特性?可读性?
元组啊,不就是不可变的列表吗?
订阅专栏 ===> Python

由于互联网上充斥着许多Python资源,反而使得部分人不知道从哪下手或者从哪提高,我总结整理了使用频率较高的Python编程技巧,旨在帮助自己及各位更上一个台阶

1. 优化代码性能和速度的技巧

  • 使用内置函数和库:Python 有很多高度优化的内置函数和库,可以节省大量时间和资源;
  • 避免使用全局变量:全局变量可以从程序中的任何位置访问,可能会降低代码速度,所以尽可能使用局部变量;
  • 使用列表推导式:这个在我之前的教程中也常说到,列表推导式比 for 循环更快,更简洁,并且用更少的代码行执行相同的操作;
  • 避免使用递归:递归函数可能会减慢代码速度,因为会占用大量内存;
  • 使用 NumPy 和 SciPy:这俩可以大大帮助优化用于科学和数学计算的代码;
  • 使用Cython来加速代码的关键部分,可以编译成C,使得速度更快;
  • 执行计算时使用“矢量化操作”和“广播”;
  • 使用多进程、多线程或异步来利用多个 CPU同时运行多个任务

2. 使用高级功能,如装饰器、生成器和元类

  • 装饰器:装饰器是一种修改函数或类行为的方法。 通常用于在不更改底层代码的情况下添加功能,例如日志记录或记忆(老八股了);
  • 生成器:生成器是一种在 Python 中创建迭代器的方法。 允许迭代大型数据集而无需将整个数据集加载到内存中,对于读取大文件或处理大量数据等任务很有帮助
  • 元类:元类是一种创建可用于创建其他类的类的方法。 可用于为类定义自定义行为,例如添加方法或属性。还可以用于创建元编程,允许编写生成其他代码的代码;
    协程:协程是一种在Python中创建并发和异步代码的方法。允许同时执行多个任务,并且它们可用于创建简单、轻量级的线程;
  • 函数注解:函数注解是一种为函数添加元数据的方式,可以用来提供函数参数、返回值和类型的更多信息,也可以用来指定函数参数和返回值的类型
  • 上下文管理器:上下文管理器是一种以安全高效的方式处理资源(常用的如文件)的方法。允许定义使用资源的上下文,并自动处理资源的打开和关闭
  • 枚举:枚举是一种定义一组命名值的方法,可以用作整数和字符串的替换。使用 Enum 类创建;
  • Namedtuples:Namedtuples是具有命名字段的元组的子类,可以通过名称而不是索引来访问字段。使用namedtuple函数创建

3.调试和处理错误的一些技巧

  • 使用内置的 Python 调试器 (pdb):内置的 Python 调试器是一个强大的工具,允许逐行调试代码、检查变量和设置断点;
  • 使用 print 语句(也是我很多场景下喜欢用的哈哈哈):将 print 语句添加到代码,通过提供程序执行流程和变量值的打印来帮助确定问题的根源;
  • 使用 linter:linter 是一种检查代码是否存在语法错误和潜在错误的工具。可以在运行代码之前捕获错误;
  • 使用单元测试框架:单元测试允许单独测试一小段代码,从而更容易查明错误的来源;
  • 使用日志库:日志库记录有关程序执行的信息,例如变量值和执行流程。 对于跟踪不常发生的错误或了解程序随时间变化的行为很有用;
  • 使用try-except块:Try-except 块通过捕获错误并提供替代执行流程来优雅地处理错误,可以帮助编写健壮且容错的代码;
  • 使用assert语句:assert 语句检查给定条件是否为真,如果为假则引发异常。用于检查输入的完整性并可用作调试辅助工具;
  • 使用日志模块:日志模块记录不同级别的消息,可用于记录调试、信息、警告、错误和关键消息;
  • 使用traceback模块:traceback 模块提取异常的堆栈跟踪,对于了解错误原因和定位代码中的故障点很有用;
  • 使用错误跟踪系统:错误跟踪系统记录、跟踪和管理错误,并跟踪错误修复的进度;

4. 编写干净易读代码的技巧

  • 使用有意义的变量和函数名称:为变量和函数使用准确反映其用途和用途的清晰、描述性名称(这个太重要了,上学期间总喜欢乱写)
  • 使用空格和缩进:一致地使用空格和缩进来分隔代码块并使代码结构清晰;
  • 使用注释:使用注释来解释代码的目的和代码中任何不清晰的部分;
  • 保持单行简短:将代码行的长度限制在 80 个字符左右
  • 使用统一的命名约定:例如变量名使用 snake_case,类名使用 CamelCase。
  • 保持函数体小且专注于某个任务:使得更容易重用和更容易理解,著名的就是main函数写了成百上千行
  • 使用文档字符串(docstrings):记录目的、参数、返回函数和类的值;
  • 遵循 PEP-8 风格指南:该指南提供了编写干净可读的 Python 代码指南。涵盖缩进、命名约定和空格等。遵循这些准则将使代码更加一致并且更易于他人阅读;

5. 使用高级数据结构,如集合、字典和元组

Python 提供了多种高级数据结构,可用于以强大而高效的方式存储和操作数据。 这些数据结构包括集合、字典和元组。

  • 集合:集合是唯一元素的无序集合。 集合通常用于成员测试、从列表中删除重复项以及交集和并集等数学运算。 使用大括号 {} 或 set() 构造函数定义。 例如 my_set = {1, 2, 3, 4}
  • 字典:字典是键值对的无序集合。字典通常用于查找、计数和排序。 使用花括号 {} 定义,键和值由冒号分隔。 例如 my_dict = {‘geeks’: 1, ‘for’: 2, ‘geeks’: 3}
  • 元组:元组是元素的有序集合。 元组类似于列表,但它是不可变的,意味着它们的元素一旦创建就无法修改。 使用括号 () 或 tuple() 构造函数定义。 例如 my_tuple = (1, 2, 3, 4)

这些数据结构可以以多种方式使用来解决不同问题。 例如,可以使用集合来快速检查某个元素是否已存在于数据集中,使用字典来高效地存储和检索数据,使用元组将多个值组合在一起并将它们用作单个实体。
重要的是,每种数据结构都有自己的优缺点,为特定任务选择正确的数据结构可以大大提高代码的性能和可读性,这哥仨在之前发的文章中都有总结

6. 使用大数据集和内存管理的技巧

处理大型数据集是一项具有挑战性的任务,需要适当的内存管理以避免内存不足,并确保代码高效运行。 以下是处理大型数据集和管理内存的一些技巧:

  • 使用内存高效的数据结构:例如,使用内存效率更高的 NumPy,而不是使用 Python 的内置列表数据结构;
  • 使用数据采样:在处理大型数据集时,首先处理较小的数据子集通常很有用。 使用随机采样等技术来完成,有助于减少加载和处理数据所需的内存量;
  • 使用延迟加载:延迟加载是一种仅在需要时将数据加载到内存中的技术,而不是一次加载整个数据集;
  • 使用迭代器和生成器:迭代器和生成器是一种处理大型数据集的方法,无需立即将整个数据集加载到内存中,允许一次处理一个数据;
  • 使用基于磁盘的存储:当处理无法放入内存的大型数据集时,将数据存储在磁盘上通常很有用, HDF5 和 Parquet 等热门库允许将大型数据集存储在磁盘上并以内存高效的方式访问;
  • 监控内存使用情况:定期监控程序的内存使用情况可以帮助识别和修复内存泄漏,并优化程序的内存使用情况。 Python 提供了 memory_profiler 和 psutil 等库来监控内存使用情况;

7. 处理字符串、数字和其他数据类型的技术

  • 字符串格式化:Python 使用 format() 方法和 f-strings 提供高级字符串格式化技术。 允许将动态值插入字符串并使它们更具可读性。 例如,使用“My name is {}”.format(“John”) 将值“John”插入到字符串中;
  • 正则表达式:Python 提供了一个名为 re 的模块使用正则表达式。 正则表达式是搜索、匹配和操作字符串的强大工具;
  • 字符串方法:Python 提供了多种可用于操作字符串的字符串方法。包括但不限于 .strip() 从字符串的开头和结尾删除空格, .split() 将字符串拆分为子字符串列表,以及 .replace() 将特定子字符串替换;
  • 数字格式化:Python 同样使用 format() 方法和 f-strings 提供高级数字格式化技术,类似于对字符串执行的操作,可以控制小数位数、千位分隔符的存在以及其他格式设置选项;
  • 类型转换:Python 提供了 int()、float() 和 str() 等函数,可用于将一种数据类型转换为另一种数据类型。 这在处理不同类型的数据时非常有用;
  • 小数精度:Python 的 decimal 模块提供了一个 Decimal 类,可以用来进行高精度的小数运算。 对于浮点数精度可能不够的金融和货币计算很有帮助;
  • 高级数学运算:Python 提供了一个数学模块,该模块提供高级数学函数,例如三角函数、对数、指数等。 又得提到NumPy, 该库也提供了这些操作的高效实现,例如矩阵操作等。

以上就是目前整理的提高Python编程水平的技巧,有任何错误欢迎指出,期待与你们共成长~

欢迎关注公众号【啥都会一点的研究生】,更多动向与干货第一时间发在此处

我是啥都生,下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web Spider案例 网洛克 第二题 JJEncode加密 练习(六)

文章目录一、资源推荐二、逆向目标三、抓包分析 & 下断分析逆向3.1 抓包分析3.2 下断分析逆向四、本地JS代码调试 & 完整JS加密代码4.1 本地JS代码调试4.2 完整JS加密代码五、python具体实现总结提示:以下是本篇文章正文内容,下面案例可供参考 …

跬智信息全新推出云原生数据底座玄武,助力国产化数据服务再次升级

2月28日,跬智信息(Kyligence)宣布全新推出国产化云原生数据底座开源项目玄武(XUANWU),以助力企业加速数据平台上云,并实现国产化升级。玄武(XUANWU)是在容器化技术上形成…

分层测试(2)单元测试【必备】

1. 什么是单元测试? 对代码中的逻辑隔离的最小代码片段进行测试,验证其逻辑是否符合预期,单元可以是函数,方法,类,功能模块。 2. 单元测试的优点 掌握代码:单元测试允许开发人员了解单元提供…

35岁的测试被裁,公司地位还不如00后...

国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作…

python公司企业编码条形码二维码生成系统

wx供重浩:创享日记 对话框发送:python编码 免费获取完整源码源文件配置说明教程等 在PyCharm中运行《企业编码生成系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,只需要输入…

Javascript的API基本内容(四)

一、日期对象 获取时间戳的方法,分别为 getTime 和 Date.now 和 new Date() // 1. 实例化const date new Date()// 2. 获取时间戳console.log(date.getTime()) // 还有一种获取时间戳的方法console.log(new Date())// 还有一种获取时间戳的方法console.log(Date.n…

maven进阶总结

maven进阶总结1. maven之间可以互相导包2. maven的依赖是具有传递性的3. 可选依赖和排除依赖:4. 继承与聚合4.1聚合4.2 继承5. 属性的配置与使用6. 版本管理8. 多环境开发和跳过测试(了解)1. maven之间可以互相导包 从当前maven的pom文件中&…

DNS服务器部署的详细操作(图文版)

DNS服务器的部署 打开虚拟机后查看已经开放的端口,可以看到没有TCP53、UDP53,说明DNS服务端口没有打开 打开我的电脑—双击CD驱动器— 选择安装可选的Windows组件 选择网络服务—域名系统(DNS)— 点击下一步后会弹出如下弹…

Kubernetes08:Controller (有状态应用)

Kubernetes08:Controller 1、无状态和有状态的区别 1)无状态: 认为Pod都是相同的没有顺序要求不用考虑我在哪个node上运行随意进行伸缩和扩展 有状态: 上面的因素都需要考虑到让每个Pod都是独立的,保持Pod启动顺序…

mysql去重查询的三种方法

文章目录前言一、插入测试数据二、剔除重复数据方法1.方法一:使用distinct2.方法二:使用group by3.方法三:使用开窗函数总结前言 数据库生成环境中经常会遇到表中有重复的数据,或者进行关联过程中产生重复数据,下面介…

【API网关】Kong安装和基本操作

文章目录前言一、API网关选型和Kong的安装1. 什么是API网关2. API网关技术选型3. 安装postgresql和migrations4. 安装kong5. 安装konga二、基本的路由转发配置1. kong的8001、8000和1337端口号的关系2. 基本的路由转发配置3. kong集成consul实现服务发现和负载均衡4. kong配置j…

程序员推荐的良心网站合集!

今天来给大家推荐几个程序员必看的国外良心网站合集。 IBM developer 技术性很强的博客网站,网站自带真实示例代码和架构解决方案,大家可以在上面找到适合自己的语言方向开始学习交流。 https://developer.ibm.com/ infoq 技术论坛社区,内…

【JavaScript】根据元素内容遍历元素的方案

▒ 目录 ▒🛫 导读需求1️⃣ jQuery2️⃣ XPATH(document.evaluate)3️⃣ 原生js(querySelectorAll & Array)🛬 文章小结📖 参考资料🛫 导读 需求 因业务需要,根据元…

文献阅读笔记 # 面向大规模多版本软件系统的代码克隆检测加速技术

面向大规模多版本软件系统的代码克隆检测加速技术,方维康 吴毅坚 赵文耘,《计算机应用与软件》复旦大学软件学院、复旦大学上海市数据科学重点实验室2022 April 面向大规模多版本软件系统的代码克隆检测加速技术 摘要 很多代码克隆检测方法主要针对软…

_Linux (网络版计算器简易实现)

文章目录1. 协议2. 网络版计算器简易实现代码链接3. 网络版计算器2-1. 约定的协议方案有两种2-3. 协议代码框架1. 自定义的协议方案2. json(库里的完整协议方案)2-4. send和recv单独使用不安全2-5. 剩余代码写法讲解参考如下:2-6. 代码运行结果示意图&am…

9.5 PIM-SM

实验目的 熟悉PIM-SM的应用场景掌握PIM-SM的配置方法 实验拓扑 实验拓扑如图9-40所示: 图9-40:PIM-SM 实验步骤 (1)配置IP地址 MCS1的配置 MCS1的配置如图9-41所示: 图9-41:配置MCS1的IP地址 R1的配置 …

VMware安装FreeBSD虚拟机

1. 下载FreeBSD镜像地址 国内阿里云下载地址: freebsd-releases-ISO-IMAGES安装包下载_开源镜像站-阿里云 选择自己需要的版本下载。 2. 创建FreeBSD虚拟机 2.1. 选择操作系统类型 2.2. 导入FreeBSD镜像 3. 安装FreeBSD 第1步:保持默认让其自动进入…

复习知识点十之方法的重载

目录 方法的重载 练习1: 练习1: 数组遍历 练习2: 数组的最大值 练习3: 练习4: 复制数组 基本数据类型和引用数据类型 方法的重载 Java虚拟机会通过参数的不同来区分同名的方法 练习1: public class Test4 {public static void main(String[] args) {//调用方法 // …

grid宫格布局新手快捷上手-f

前言 grid 网上有很多,但都是大而全的,感觉新人上手很吃力,本文仅以最快捷的方式进行介绍,如何使用grid宫格布局 本文是新人上手,若想了解更多grid布局,请阅读其他文章 使用 声明布局 display: grid;声…

springboot+pgbouncer+postgres数据库连接池集成方案及问题解决

期望通过每一次分享,让技术的门槛变低,落地更容易。 —— around 前言 旨在解决微服务项目全是连接池并影响数据库并发连接,作者的环境是基于sprongboot微服务连接postgres数据库,每个微服务的DAO层配置都使用了连接池技术。后续…