七套Python库快速提升您项目的代码可维护性

2023-12-29 07:08

本文主要是介绍七套Python库快速提升您项目的代码可维护性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

当软件项目进入“维护模式”时,原本的代码可读性与编码标准往往很难得到保证。(当然,这些标准在软件项目建立之初就不容易坚持实施。)但必须强调的是,在代码库中保持样式与测试标准的一致性,正是降低维护负担的重要前提。只有这样,我们才能确保未来的开发人员得以快速了解新的情况,并随着时间推移切实保证项目与应用程序的健康状况。

保护项目未来可维护性的一种理想方式,在于利用外部库检查您的代码运行状况。以下是目前开发人员最喜爱的的代码梳理库,它们能够以强制方式执行一致性样式,并确保项目在成熟之后仍具备可接受的测试覆盖率。

检查您的代码样式

PEP 8是一套Python代码样式指南,其为行长度、缩进、多行表达式以及命名约定等内容提供重要的执行规则。当然,您的团队也许拥有自己的样式规则,且其与PEP 8略有不同。

凭借代码样式指南都拥有同样的目标——在代码库中强制实施一致的标准,从而使其更具可读性并降低维护难度。在这方面,以下三套库能够帮助大家高效改善代码质量。

1. Pylint

Pylint 是一套用于检查PEP 8样式违规与常见错误的库。它能够与多种高人气编辑器及IDE良好集成,亦可通过命令行加以运行。

您可以运行pip install pylint命令以进行安装。

要通过命令行使用Pylint,您需要运行 pylint [options] path/to/dir or pylint [options] path/to/module.py。Pylint将向控制台输出关于样式违规以及其他错误警告。

大家也可以利用 pylintrc配置文件自定义Pylint的错误检查。

2. Flake8

Flake8是一款“Python工具,可将PEP 8、Pyflakes(类似于Pylint)、McCabe(代码复杂性检查器)以及其他第三方插件加以结合,用以检查Python代码中的样式与质量。”

要使用Flake8,您需要运行 pip install flake8。而后,运行flake8 [options] path/to/dir or flake8 [options] path/to/module.py 查看相关错误与警告信息。

与Pylint类似,Flake8也允许用户对配置文件的检查内容进行自定义,其中包含非常清晰的文档,例如一些实用的commit hook,用以自动检查开发流程中的代码片段。

Flake8能够集成各类流行编辑器与IDE,但文档当中通常并未提及相关指令。要将Flake8与您喜爱的编辑器或IDE进行集成,请在线搜索相关插件(例如 Flake8 plugin for Sublime Text)。

3. Isort

Isort是一套库,能够按字母顺序对您的导入内容进行排序并将其拆分为适当部分(例如标准库导入、第三方库导入、来自您自有项目的导入等)。这将提升代码可读性并在模块中包含大量导入内容时降低查找难度。

要安装isort,您需要运行 pip install isort,而后使用 isort path/to/module.py命令加以运行。关于更多配置选项,请参阅 说明文档。例如,您可以通过isort.cfg文件配置isort如何处理来自某套库的多行导入代码。

与Falke8及Pylint一样,isort同时提供多款插件以集成各类流行编辑器及IDE。

代码样式外包

需要强调的是,在命令行中手动为需要变更的各个文件进行代码梳理是一项痛苦的工作,大家也可能并不喜欢特定插件在IDE中的运行方式。

此外,您的同事可能更倾向于利用不同的插件或者干脆不配合任何插件使用自己喜爱的编辑器; 或者您自己可能不想投入太多心力进行代码梳理并根据警告内容做出调整。随着时间的推移,这一切都可能令您的共享代码库变得混乱且难以阅读。

在这方面,一大理想解决方案是利用库自动对代码进行重新格式化,从而直接为您传递PEP 8内容。这里我们推荐的三套库都拥有不同级别的自定义能力,亦会以不同的默认方式进行代码格式化。

这些默认方式各有优劣,因此大家可能需要像使用Pylint以及Flake8那样对其进行测试,看看哪些能够提供最有效的自定义选项,又有哪些不可更改的默认值比较符合您的要求。

4. Autopep8

Autopep8 能够自动对您指定的模块内的代码进行格式化。它会进行重新缩进、修复缩进、删除不必要的空格,同时重构常见的比较错误(例如布尔值与None)。感兴趣的朋友可以点击此处查看其文档中的完整更正列表。

要安装Autopep8,您需要运行pip install --upgrade autopep8。要对代码进行重新格式化,需要运行autopep8 --in-place --aggressive --aggressive <filename>。其中的aggressive标记(及其数量)表示您希望在代码样式上为autopep8提供多少控制权空间。您可以点击此处了解关于aggressive选项的更多细节信息。

5. Yapf

Yapf 是另一种代码重新格式化选项,其提供自己的配置选项列表。与autopep8不同,yapf不仅能够解决PEP 8违规问题,同时亦会重新格式化那些并不违反特定PEP 8规则的代码——包括不符合样式一致性或者存在其他可读性问题的部分,从而进一步提升代码可维护性。

要安装yapf,您需要运行 pip install yapf。要对代码进行重新格式化,需要运行 yapf [options] path/to/dir 或者yapf [options] path/to/module.py。您可以点击此处查看自定义选项的完整列表。

6. Black

Black在代码重新格式化领域可谓后起之秀。它与autopep8以及Yapf颇为相似,但又有着自己的特点。重点在于,Black提供的自定义选项非常有限。换言之,其基本思路是用户不应对代码样式做出决定,而应将决定权交给Black。当然,大家也可以查看有限的自定义选项,并将其存储在配置文件当中。

Black要求配合Python 3.6+使用,但亦可对Python 2代码进行格式化。要使用Black,您需要运行 pip install black。要对代码进行格式化,您需要运行: black path/to/dir 或者 black path/to/module.py。

检查测试覆盖率

在编写测试的过程中,大家需要确保其能够对代码库中的新代码进行测试,同时不致降低您的测试覆盖率。尽管测试覆盖率百分比并非衡量测试有效性与充分性的惟一指标,但其无疑是确保项目遵循基本测试标准的重要方法之一。为了衡量测试覆盖率,我们向您推荐Coverage。

7. Coverage

Coverage拥有多个选项,可用于向您报告测试覆盖率,具体包括将结果输出至控制台或HTML页面,并指示哪些行号存在测试覆盖缺失。您可以设置配置文件以自定义Coverage的检查内容,并降低其运行难度。

要安装Coverage,您需要运行pip install coverage。要运行程序并查看其输出结果,需要运行 coverage run [path/to/module.py] [args],而后查看程序的输出结果即可。要获取哪些代码行未被测试覆盖,需要运行 coverage report -m。

持续集成工具

持续集成(简称CI)是您可以运行的一系列流程,用于在代码合并与部署之前自动检查梳理错误并给出测试覆盖率的最小值。目前有多种免费或付费工具能够自动完成上述目标,这里我们就不一一赘述了。不过考虑到持续集成是实现代码可读性与可维护性的重要环节,这里向大家推荐两种一般性持续集成工具:Travis CI 与 Jenkins。

更多Python视频、源码、资料加群683380553免费获取

原文标题:7 Python libraries for more maintainable code,作者:Jeff Triplett

这篇关于七套Python库快速提升您项目的代码可维护性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548714

相关文章

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.