Python学习笔记27:进阶篇(十六)常见标准库使用之质量控制中的代码质量与风格第一部分

前言

本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。

根据模块知识,一次讲解单个或者多个模块的内容。

教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html

质量控制

质量控制(Quality Control, QC),主要关注于提高代码质量、确保数据准确性和程序稳定性。

QC可以通过多种实践、工具和库来实现,其中主要包括以下方面:

  1. 代码质量与风格
    PEP 8: Python官方风格指南,遵循PEP 8可以确保代码的一致性和可读性。
    Linting工具: 如flake8, pylint, 或black,这些工具可以自动检查代码风格错误、潜在的bug以及不符合最佳实践的地方。
    单元测试: 使用unittest或pytest库编写测试用例,确保代码功能按预期工作,这是软件质量控制的基础。
  2. 数据质量
    Pandas: 对于数据分析任务,Pandas库提供了强大的数据清洗功能,如去除或填充缺失值、数据类型转换、数据验证等。
    数据验证库: pydantic用于数据验证和设置数据模型,确保输入数据符合预期格式。
    异常值检测: 利用科学计算库scipy或直接在Pandas中进行统计分析,如Z-score或IQR方法,来识别并处理数据集中的异常值。
  3. 文档与注释
    docstrings: 遵循PEP 257编写文档字符串,提供函数、类和模块的自解释文档。
    Sphinx: 用于生成高质量的项目文档,支持从docstrings自动生成文档。
  4. 性能与优化
    Profiling: 使用cProfile或第三方库如line_profiler进行性能分析,找出程序中的瓶颈。
    Memory Profiling: memory_profiler库可以帮助监测内存使用情况,避免内存泄漏。
  5. 持续集成/持续部署(CI/CD)
    GitHub Actions, GitLab CI/CD, Travis CI等服务,可以自动化代码测试、构建和部署流程,确保每次提交的质量。
  6. 代码审查
    工具如Gerrit, GitHub PR Reviews促进团队成员间的代码审查,提前发现并修正问题。

代码质量与风格

之前最开始的学习的时候我就有提过要保持一个好的编码习惯,这不是空话。在软件开发中,代码质量与风格是维护项目长期健康发展的基石。
遵循良好的编程规范不仅能够提升代码的可读性和可维护性,还能促进团队成员之间的有效协作。

PEP 8: Python官方风格指南

PEP 8是指Python Enhancement Proposal(Python增强提案)中的第8号提案,它是Python社区关于编写Python代码时应遵循的官方风格指南。PEP 8旨在提升代码的可读性和一致性,使Python代码更加易于理解与维护。

虽然某些情况下根据具体项目需求可能会有所变通,但遵循PEP 8通常被认为是最佳实践。

这里只总结一些内容,想更细致的了解需要自行学习。

基本原则
代码布局: 代码应该有清晰的层次结构,使用空行分割函数定义、类定义以及大块的代码逻辑。
缩进: 一致使用4个空格进行缩进,避免使用制表符或混合使用制表符与空格。
行长度: 建议每行代码不超过79字符,这样可以避免水平滚动,并能在大多数编辑器中并排显示文件。对于长表达式,可以使用括号换行。
命名约定: 变量名、函数名应小写字母加下划线(snake_case)。 类名采用驼峰命名法(CapWords,即每个单词首字母大写,不使用下划线)。常量全大写,单词间用下划线分隔。 空白: 操作符两边、逗号后应有空格,关键字之后(如if, for等)也应有空格,但函数定义的参数列表、索引或切片操作除外。
注释: 注释应清晰、简洁,使用英文书写。模块级文档字符串(docstring)应使用三引号包围,遵循特定格式。 特殊情况处理 导入语句:
应放在文件顶部,按照标准库、第三方库、本地应用/库的顺序排列,每组之间用空行分隔。可以使用绝对导入而非相对导入以增加清晰度。
字符串引用: 对于单行字符串,如果字符串中包含单引号且没有双引号,推荐使用单引号;反之亦然。多行字符串应使用三引号。
空行: 类定义之间、顶级函数或类定义之间应有两个空行;方法定义内逻辑段落间使用一个空行分隔。
其他指导
异常: 使用异常处理机制时,应尽量捕获具体的异常而不是泛泛的Exception,并合理地处理或重新抛出异常。
类型注解: 自Python3.5起,可以使用类型提示来增加代码的可读性和工具的可用性,但应保持简洁,不强制要求。

Linting工具

Linting工具是编程中用来自动检查代码质量和风格的软件,它们能够帮助开发者识别潜在的错误、不符合编程规范的地方以及提高代码的一致性和可读性。
对于Python编程语言,有几个知名的Linting工具,它们各有特点,广泛应用于代码质量控制流程中:

  • Flake8
    简介: Flake8是将pycodestyle(原pep8)、pyflakes和mccabe三个工具整合在一起的工具,它检查PEP 8编码规范、语法错误以及复杂的代码结构。
    特点: 能够快速指出代码中不符合PEP 8风格的地方,同时检测未使用的变量、导入错误等简单的程序错误。
    使用: 安装简单,可通过pip安装 (pip install flake8),之后在命令行中运行flake8 your_file.py即可。
  • Pylint
    简介: Pylint是一个更为严格的静态代码分析工具,它不仅仅检查代码风格,还对代码进行复杂的静态分析,寻找潜在的错误,比如未使用的变量、无效的语句、不符合最佳实践的代码结构等。
    特点: 功能强大,提供大量可配置的检查规则,支持更多的代码质量检查,包括复杂度分析、重复代码检测等。
    使用: 同样通过pip安装 (pip install pylint),使用时运行pylint your_file.py。
  • Black
    简介: Black是一个代码格式化工具,它不是传统意义上的Linting工具,因为它不报告错误而是直接修改代码,使其符合一套严格的格式化规则。尽管如此,它在实践中被广泛用于保持代码风格的一致性。
    特点: 黑色(Black)强调“不可商量”的代码格式化,一旦配置好,它会自动格式化代码,无需人工调整空格、缩进等,减少了团队间因代码风格不同而产生的摩擦。
    使用: 通过pip安装 (pip install black),使用命令black your_file.py自动格式化代码。

综合使用
在实际开发中,这些工具经常被结合使用,例如先用Black自动格式化代码,确保基础的格式一致性,再用Flake8或Pylint进一步检查代码质量。许多开发环境和IDE(如Visual Studio Code、PyCharm)也支持集成这些工具,提供即时反馈,帮助开发者在编码过程中即时修正问题。

这些工具不多讲,因为我们之前已经安装了PyCharm,这段时间的学习中应该也能发现,IDE会在你的代码中出现提示,对问题代码或者不符合规范的代码进行标示。

结尾

质量控制我个人觉得是比较重要的一部分内容,实践方面也还有很多内容,除去代码质量以外,还有数据质量,文档注释,性能优化等等。

就是今天的代码质量也还有很重要的一部分:单元测试没看完,内容不少,慢慢学习。

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

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

相关文章

Linux应用---内存映射

写在前面: 在进程间通信中,有一种方式内存映射。内存映射也是进程间通信的方式之一,其效率高,可以直接对内存进行操作。本节我们对内存映射进行学习,并结合案例进行实践。 1、基本理论 内存映射:是将磁盘文…

代码随想录-Day46

121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…

【JVM-05】Java内存区域(运行时数据区)、对象创建过程、内存布局

【JVM-05】Java内存区域即运行时数据区、对象创建过程、内存布局 1. 介绍下Java内存区域(运行时数据区)1.1 程序计数器(线程私有)1.2 虚拟机栈(线程私有)1.3 本地方法栈(线程私有)1.4 Java堆(线程共享)1.5 方法区(线程共享)1.5.1 方法区和永久代的关系1.5.2 常用参数1.5.3 为什…

Halcon支持向量机

一 支持向量机 1 支持向量机介绍: 支持向量机(Support Vector Machine,SVM)是Corinna Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别表现出许多特有的优势。 2 支持向量机原理: 在n维空间中找到一个分类超平面…

node与npm安装教程

node与npm的下载安装教程: 文章目录 node与npm的下载安装教程:---Node.js 介绍NPM 介绍 一:下载(node与npm的安装包是在一起的)二:安装1:双击运行安装文件1-node-v14.15.0-x64.msi,点击下一步。…

常用渲染管线介绍

1、光栅化渲染管线(Raster pipeline) 1.1、光栅化概述 光栅化图形渲染管线是实时渲染的核心组件。渲染管线的功能是通过给定虚拟相机、3D场景物体以及光源等场景要素来产生或者渲染一副2D的图像。如上图所示,场景中的3D物体通过管线转变为屏…

动态渲染dom

最近在做类似论文生成的一个系统&#xff0c;比较复杂&#xff0c;简单来说就是文字、图表的展示&#xff0c;但是顺序不固定&#xff0c;所以有动态渲染dom的需求&#xff0c;以下是我写的小demo&#xff0c;以作记录。 <template><div id"app"><div…

Datadog Dash 2024 新功能解析

Datadog 2024 年的 Dash 刚刚落下帷幕&#xff0c;作为正在与 Datadog 开始竞争的观测云&#xff0c;我们认真仔细的分析了 Datadog 的每一个新功能&#xff0c;发现一些很有意思的事情&#xff0c;今天就给大家做一次全面的分析。&#xff08;所有 Datadog 的 Dash 的最新功能…

基于改进YOLOv5s的跌倒行为检测 | 引入SKAttention注意机制 + 引入空间金字塔池化结构SPPFCSPC + 结合ASFF自适应空间融合

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。为了实现电厂人员跌倒行为的实时检测&#xff0c;防止跌倒昏迷而无法及时发现并救援的事件发生&#xff0c;针对跌倒行为检测实时性以及特征提取能力不足的问题&#xff0c;提出了一种改进YOLOv5s的跌倒行为检测算法网络&a…

PD虚拟机和VirtualBox有什么区别?Parallels Desktop 19.1.1 破解版

随着计算机技术的不断发展&#xff0c;虚拟机软件在现代信息技术领域中扮演着越来越重要的角色。虚拟机不仅可以帮助用户在一台物理机器上运行多个操作系统&#xff0c;还能有效隔离不同环境&#xff0c;提升系统安全性。在众多的虚拟机软件中&#xff0c;PD虚拟机&#xff08;…

第一百三十八节 Java数据类型教程 - Java boolean数据类型和float数据类型

Java数据类型教程 - Java boolean数据类型 布尔数据类型只有两个有效值:true和false。 这两个值称为布尔值字面量。 我们可以使用布尔值字面量 boolean done; // Declares a boolean variable named done done true; // Assigns true to done布尔变量不能转换为任何其他…

ESP32-VScode环境设置

目录 前言 一、安装VSCode 二、安装ESP32环境 1.安装ESP-IDF 2.ESP-IDF设置 3:开始配置环境 4.打开example进行验证 5.烧录 6.调整波特率 总结 前言 环境&#xff1a;Visual Studio Code 芯片&#xff1a;ESP32 说实话&#xff0c;这是我装的时间最长的一个环境&…

汇聚荣拼多多电商哪些热词比较受关注?

汇聚荣拼多多电商哪些热词比较受关注?在探讨拼多多电商平台的热点关键词时&#xff0c;我们首先得明确&#xff0c;这个平台因其独特的商业模式和市场定位&#xff0c;吸引了大量消费者的目光。拼多多通过“拼团”购物的方式迅速崛起&#xff0c;成为电商行业的一个重要力量。…

2024年用scrapy爬取BOSS直聘的操作

SCrapy框架实现对BOSS直聘的爬取 文章目录 SCrapy框架实现对BOSS直聘的爬取对SCrapy框架的一个简单认识Scrapy 组件的作用Scrapy 数据流 1. 测试反爬2. 定义一个下载中间件类,截取spiders的请求&#xff08;中间件直接截取请求&#xff0c;并且返回给Spider进行数据解析&#x…

【最新鸿蒙应用开发】——用户信息封装

用户管理工具封装 1. 为什么要封装 在进行如下登录功能时&#xff0c; 通常需要将一些用户信息以及token进行持久化保存&#xff0c;以方便下次进行数据请求时携带这些用户信息来进行访问后端数据。下面分享一下鸿蒙当中实用的持久化封装操作。 2. 步骤 封装用户信息管理工具…

Mybatis Plus 自动填充注解 @TableField(fill = FieldFill.INSERT_UPDATE)

第一步&#xff1a;在需要自动填充的位置加上注解 通过在创建时间和修改时间上添加 fill 填充字段 进行自动填充 第二步&#xff1a;要想实现自动填充还需要实现MetaObjectHandler接口&#xff0c;在这里实现自动填充的逻辑 Component public class MyMetaObjectHandler …

tinyshop项目部署

参考软件测试之测试用例设计&#xff08;四&#xff09;_管理后台 测试用例-CSDN博客 1、下载xampp 2、修改apache和mysql的端口分别为4431 &#xff0c;8013和3306 3、访问页面&#xff1a;输入ip:端口号&#xff0c;出现以下页面即成功 4、安装tinyshop商城 将解压的tinys…

动态住宅代理IP详细解析

在大数据时代的背景下&#xff0c;代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性&#xff0c;而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

Transformation(转换)开发-switch/case组件

一、switch/case组件-条件判断 体育老师要做一件非常重要的事情&#xff1a;判断学生是男孩还是女孩、或者是蜘蛛&#xff0c;然后让他们各自到指定的队伍中 体育老师做的事情&#xff0c;我们同样也会在Kettle中会经常用来。在Kettle中&#xff0c;switch/case组件可以来做类似…

【等保2.0的内容有哪些?】

“在“等保2.0”的基础上&#xff0c;分别增加了云计算安全、移动互联安全、物联网安全、工控系统安全、大数据安全5个拓展需求。 《中华人民共和国刑法》第253条&#xff0c;非法将公民个人资料卖给他人&#xff0c;并处罚金。 违反国家相关法律法规&#xff0c;将其在执行公…