这七个100%提高Python代码性能的技巧,一定要知道
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编程水平的技巧,有任何错误欢迎指出,期待与你们共成长~
欢迎关注公众号【啥都会一点的研究生】,更多动向与干货第一时间发在此处
我是啥都生,下期再见!
相关文章:
这七个100%提高Python代码性能的技巧,一定要知道
B站|公众号:啥都会一点的研究生 相关阅读 整理了几个100%会踩的Python细节坑,提前防止脑血栓 整理了十个100%提高效率的Python编程技巧,更上一层楼 Python-列表,从基础到进阶用法大总结,进来查漏补缺 Python-元组&…...
计算机网络笔记、面试八股(五)—— 浏览器输入URL
本章目录5. 从输入URL到浏览器显示页面过程中都发生了什么5.1 URL输入5.2 DNS解析5.2.1 域名的等级5.2.2 DNS解析的流程5.2.3 DNS查询方式5.3 建立TCP连接5.4 发送HTTP/HTTPS请求5.5 服务器处理请求并返回HTTP响应5.6 浏览器解析渲染页面5.7 HTTP请求结束,断开TCP连…...
【速记】快速调通算法项目的环境
1.创建新的conda环境,避免把原有的环境给搞坏。 在CMD中执行,而不是在anaconda的命令行中执行: conda create -n 环境名 --offline python3.8 2.在pycharm中配置conda环境: setting->Project Interpreter->齿轮->add-&g…...
开放开源开先河(上)
目录 1.唯一性定义品牌 2.打造爆款塑造品牌 3.构筑生态体系传播品牌 2022年7月28日,以“软件定义世界 开源共筑未来”为主题的全球数字经济大会开放原子开源峰会在北京开幕,承办主峰会和为捐赠人进行授牌仪式的开放原子开源基金会再次进入公众视野。基金…...
TencentOS 3.1安装MySQL 8.0.32
到官网下载安装包:https://dev.mysql.com/downloads/mysql/ 使用如下命令解包。 tar xf mysql-8.0.32-1.el8.x86_64.rpm-bundle.tar 使用rpm -qa |grep mysql 和rpm -qa |grep mariadb检查是否安装过mysql 如果有,使用下命令移除: rpm -e …...
Javascript的API基本内容(五)
一、js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。 比如:变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型, 定义了一套操作HTML文档的API BOM 浏览器对象模型,定义了一套操作浏览器窗口的API 二、loc…...
分层测试(2)单元测试【必备】
1. 什么是单元测试? 对代码中的逻辑隔离的最小代码片段进行测试,验证其逻辑是否符合预期,单元可以是函数,方法,类,功能模块。 2. 单元测试的优点 掌握代码:单元测试允许开发人员了解单元提供…...
代码随想录算法训练营day45 |动态规划之背包问题 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数
day4570. 爬楼梯 (进阶)1. 确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例来推导dp数组322. 零钱兑换1. 确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组279.完全平方数1. 确…...
秒懂算法 | 基于图神经网络的推荐算法
图神经网络(Graph Neural Networks,GNN)是近几年兴起的学科,用来作推荐算法自然效果也相当好,但是要学会基于图神经网络的推荐算法之前,需要对图神经网络自身有个了解。 图卷积网络(Graph Convolutional Networks,GCN)提出于2017年。GCN 的出现标志着图神经网络的出现。深度学习…...
CANoe TC8测试脚本的结构介绍
CANoe TC8脚本是通过vTESTstudio平台编写。每个协议(ARP\ICMPv4\IPv4\UDP\TCP\SOMEIP\DHCP)都有自己的vtt文件。每个vtt文件的测试树结构为: Test Fixture Fixture Preparation Test Case Test Case … Test Case Test Case Fixture Completion 当Test Fixture里的Test Case…...
DP(4)--区间DP
将n(1≤n≤200)堆石子绕圆形操场摆放,现要将石子有次序地合并成一堆。 规定每次只能选相邻的两堆石子合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 (1)选择一种合并石子的方案,使得做n-1次合并,得分的总…...
【C语言】“qsort函数详解”与“使用冒泡思想模拟使用qsort”
✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ 文章目录✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨qsort的介绍:一、qsort函数的使用✨比较int类型数据比较字符型数据比较结构体数据冒泡思想…...
接口自动化框架---升级版(Pytest+request+Allure)
目录:导读 一、简单介绍 二、目录介绍 三、代码分析 写在最后 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。 第一版入口:接口自动化框架(PytestrequestAllure…...
C语言循环语句简述
C 循环 有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次…...
STM32开发(16)----CubeMX配置DMA
CubeMX配置DMA前言一、什么是DMA?二、实验过程1.CubeMX配置2.代码实现3.实验结果总结前言 本章介绍使用STM32CubeMX对DMA进行配置的方法,DMA的原理、概念和特点,配置各个步骤的功能,并通过串口DMA传输实验方式验证。 一、什么是…...
让物流园区可视可控,顺丰供应链与亚马逊云科技的供应链新解法
导读:物流园区如何破解供应链断点?在物流园区附近,我们经常看到周边道路停满了集装箱卡车。这是物流园区的一个典型痛点,由于园区内部业务情况的不可见性,司机们往往到了园区才被告知业务繁忙,需要长时间排…...
2023年3月北京/西安/广州/深圳DAMA-CDGA/CDGP数据治理认证报名
DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…...
「TCG 规范解读」TCG 主规范-设计原则
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alliance,TCPA)所开发的规范。现在的规范都不是最终稿,都…...
【Spring源码】Spring AOP的核心概念
废话版什么是AOP关于什么是AOP,这里还是要简单介绍下AOP,Aspect Oriented Programming,面向切面编程,通过预编译和运行期间提供动态代理的方式实现程序功能的统一维护,使用AOP可以降低各个部分的耦合度,提高…...
华为OD机试用Python实现 -【任务混部】(2023-Q1 新题)
华为OD机试题 华为OD机试300题大纲任务混部题目输入输出示例一输入输出说明示例二输入输出说明备注Code代码编写思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/ca…...
Linux yum 命令
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖…...
package.json 字段配置
文章目录环境导入相关main 和 modulewebpack resolve.mainFieldsbrowserexports定义其他模块根据导入语句导出嵌套环境导出vue中 exports 用法自定义运行环境环境导入相关 main 和 module 根据导入模块时不同的模块规范语句查找不同的入口文件 "main": "dist…...
springboot中集成redis,二次封装成工具类
大家好,我是雄雄,欢迎关注微信公众号:** 雄雄的小课堂 ** 现在是:2023年2月28日11:01:56 前言 redis大家应该都不陌生,我们在好多场景下都会使用,最近在面试别人的时候,也会问一些关于redis的…...
Linux Vim 简介
文章目录01. 编辑器 Gedit 介绍02. 什么是 Vi(Vim)03. vim工作模式4.1 命令模式4.2 编辑模式4.3 末行模式04. vim教程05. vim基本操作06. vim实用操作7.1 命令模式下的操作7.2 末行模式下的操作01. 编辑器 Gedit 介绍 gedit 是一个 GNOME 桌面环境下兼容 UTF-8 的 文本编辑器。…...
软件测试面试题 —— 整理与解析(2)
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:🌎【Austin_zhai】🌏 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能…...
HashMap与Hashtable的这九个区别,你知道吗
Hashtable Hashtable是原始的java.util的一部分,属于一代集合类,是一个Dictionary具体的实现 。Java1.2重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集合框架中。它和HashMap类很相似。 Hashtable与HashMap的区别 …...
Java奠基】掌握Java基础知识
目录 常见字面量 特殊字面量 数据类型 标识符 键盘录入 常见字面量 字面量就是数据在程序中的书写格式,字面量的分类如下: 字面量类型说明举例整数类型不带小数点的数字12,25小数类型带小数点的数字3.14,-5,20…...
Hive窗口函数-lead/lag函数
前面我们学习的first_value和last_value 取的是排序后的数据截止当前行的第一行数据和最后一行数据 Lag和Lead分析函数可以在一次查询中取出当前行后N行和前N行的数据,虽然可以不用排序,但是往往只有在排序的场景下取前面或者后面N 行数据才有意义 这种…...
2023JAVA面试题全集超全面超系统超实用!早做准备早上岸
2022年我凭借一份《Java面试核心知识点》成功拿下了阿里、字节、小米等大厂的offer,两年的时间,为了完成我给自己立的flag(拿下一线互联网企业offer大满贯),即使在职也一直在不断的学习与备战面试中!——或…...
FreeRTOS入门(05):事件组
文章目录目的基础说明相关函数使用演示总结目的 事件组是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章:《FreeRTOS入门(01):基础说明与使用演示》 基础说明…...
无锡专业网站排名推广/网络营销和传统营销的区别有哪些
问题:本站对该题的题解方法,c下可ac, 用python测试结果TLE, 过不了倒数第二个testcase。详情: 我用了不同于题解方法ac后,看到题解很简洁,便照用python照写了一个测速度,结果TLE。而…...
风景旅游网页设计/百度关键词seo公司
文章目录1、使用1G内存够,从 10 GB 大的文件中获取出现次数为 top3 多的 IP?2、分析2.1、可能出现的IPV4个数及所需存储空间2.2、分而治之的思路2.2.1、大文件拆小文件(相同IP放到同一组文件)2.2.2、对小文件的 IP 进行遍历计数(I…...
电子商务网站建设文案/中国新闻网
还在认为没有实验就不能发表论文?还在为不精通挖掘GEO,TCGA,SEER等数据库而痛苦不堪?还在为不知道如何找课题找靶点而苦恼?还在为不会那些高大上的图表而暗自伤神?快来参加莫速乎的用R语言进行科研数据挖掘…...
wordpress手机号注册/外贸互联网推广的
说下需求,当用一些网页文本编辑器提交一些字符的时候,会带有一些用于控制格式的HTML标记,我们的需求是取出所有标记中的文字当然也可以用于取出所抓取的网页中的文字内容!代码很容易看懂![code lang”java”]package c…...
广州免费推广网站建设/温岭网络推广
如今,最流行的云计算模式就是基础设施即服务(IaaS),但是它并不总是云应用安全的最佳模式。很多用户都知道平台即服务(PaaS)和软件即服务(SaaS)可以实现较好的成本节约,尤其对于那些无法访问高技能云计算技术资源的用户来说,更是如…...
武汉网站建设027/香港seo公司
前言 使用vue ElementUI 开发项目时,使用到e-date-picker组件选择日期范围dateRange,当默认dateRange直接赋值后,导致组件内回显的值无法删除且也无法修改。 解决方案 setTemp(){// 直接使用下列方式直接赋值,会导致回显无法更…...