10.1让Python代码变得更好的工具

对于大多数人来说,学习和实践新知识可能没有统一的定式,但在使用的工具上我们可以做到统一,统一的工具能让我们写出更规范、质量更好的代码。

因此无论对于刚入门的小白还是正在成长的新人来说,学会使用辅助工具是十分有必要的。本文将会介绍一些笔者在日常个人项目和工作中都会用到,并最后向团队推广使用的Python辅助工具。

不过代码当中有一个部分,却是能被自动化并且通过工具来检查,最后帮助我们完成的修改的,即代码格式化(CodesFormatting)。

代码格式化其实旨在改善代码的可读性从而提高整体的代码质量,即可以理解成为我们在上学时,老师常常会提到的但却经常容易被人忽视的考试得分项:保持「卷面整洁」。

读者可以分别对比以下两段代码:

#withoutcodeformattingdefthis_is_a_function_without_formatting(var_a,var_b,var_c,var_d,with_long_arguments):ifvar_a!=0andvar_b==1andnot(var_corvar_d)andlen(with_long_arguments)<10:do_something()foo=this_is_a_function_without_formatting(var_a=1,var_b=2,var_c=3,var_d=4,with_long_arguments=with_long_arguments=[5,6,7,8,9])#codeformattingdefthis_is_a_function_with_formatting(var_a,var_b,var_c,var_d,with_long_arguments,):if(var_a!=0andvar_b==1andnot(var_corvar_d)andlen(with_long_arguments)<10):do_something()foo=this_is_a_function_with_formatting(var_a=1,var_b=2,var_c=3,var_d=4,with_long_arguments=[5,6,7,8,9],)相比未格式化的代码,可以看到格式化后的代码更加规范、可读性更好。

所以使用Black之后上述代码将会是这样:

使用Black的方式很简单,通过pipinstallblack安装到你的Python环境中,然后在代码中运行以下命令即可:

black/path/to/your/python/file.py就是这么简单!

当然Black也提供了一些可供配置的选项,但工具本身的默认设置已经非常完善,不需要我们再额外调整了,需要调整的配置项也是寥寥几个,我们可以通过命令行来查看并使用对应的配置项:

#pyproject.toml[tool.black]line-length=89skip-string-normalization=true之后在包含该配置文件的目录下,只需要执行Black命令以及待格式化的代码文件路径即可,而无须指定相应的命令行选项参数。

Python社区的生态一直都是十分丰富,所以在开发项目的过程中,我们往往会使用到多个库或同一个库中的多个模块。但在缺乏规范的情况下,被导入的部分可能会凌乱、无组织地分散在我们的代码中,所以当我们复现代码时,很可能就会因为忘记导入某些模块而报错。

就像官方给出的示例代码一样:

针对以上存在的一些导入问题,要么我们就干脆每个导入的部分只占一行,要么就是来自同一模块下的导入部分都连接在一起。

所以这时候isort就排上了用场,上面的代码就会被格式化成以下形式:

这样我们的代码不仅看起来清爽了许多,同时也能准确定位到我们已经导入的部分有哪些。

使用isort之前同样我们也需要通过pip命令进行安装:

pipinstallisort然后用法和Black一样,在使用时指定需要格式化的Python代码文件路径即可:

isort/path/to/your/python/file.pyisort不会像Black那样「执拗」且充满不妥协精神,它存在大量可供选择的配置选项和定制化接口,以满足不同风格、团队规范的需要,官方文档上有着详细的记录:

isort同样可以将配置项写入配置文件中,并且也可以和Black搭配使用,不过需要指定相应的兼容配置项profile并将其设置为black,这里笔者仅以pyproject.toml文件为例:

以上配置项仅仅只是笔者在平时个人或工作项目中的配置示例,受限于篇幅读者可以根据自己的需要查阅isort的官方文档以了解更多的可配置项内容。

由于像Python、JavaScript这些动态类型的解释型语言,不具备Java、Go这样静态类型的编译型语言在编译时的检查机制,因此我们无法事先感知到代码当中存在的一些问题,只有运行代码时这些问题才会被暴露。比如像如下的代码:

在IDE中此时这段代码并并没有出现任何问题,我们仅知道multiply()只有一个numbers参数,但到底这个参数可以传递哪些类型的数据我们却不得而知。于是当我们运行上述代码时,问题就出现了:

可以看到,multiply()函数应该是只支持包含数值型的容器类型数据,因此当我们向其传入一个包含字符串型的集合时必然会出现错误。

这也就是动态类型的解释型语言存在的一个弊端,所以在开发中不少程序员都会体会到「动态一时爽,重构火葬场」的心路历程。

因此从结果可以看到,当我对代码简单修改并添加类型注解之后,IDE很快速地就能发现了与代码要求不相符的部分,并对其给出了详细提示。

目前关于Python的静态检查工具有许多,总的来说可以分为两类:代码规范检查和代码逻辑检查。

在前面关于Black的内容中笔者有曾提到过PEP8规范,其中有部分的规范内容是可以通过像Black和isort这样的工具来实现自动格式化,而有些部分可能就需要借助代码规范检查工具才能发现并手动处理,比如一行代码是否超过80个字符、是否存在已导入未使用的库或模块等,这些都是需要代码规范检查工具介入的地方。

目前大部分IDE也具备了类似的代码规范检查功能,我们可以很轻易发现大部分不合乎代码规范的问题:

除此之外,Python社区也有类似的工具供我们选择,大部分我们都可以在PyQCA的项目仓库中找到:

这里笔者就主要选择flake8,因为它是多个工具的集合,在使用上也相对方便。在使用前先通过pip命令工具进行安装:

pipinstallflake8之后我们可以直接像使用Black或isort那样在执行命令后紧接着对应的Python代码文件路径。比如前面的IDE代码:

$flake8--helpusage:flake8[options]filefile...positionalarguments:filenameoptionalarguments:-h,--helpshowthishelpmessageandexit-v,--verbosePrintmoreinformationaboutwhatishappeninginflake8.Thisoptionisrepeatableandwillincreaseverbosityeachtimeitisrepeated.--output-fileOUTPUT_FILERedirectreporttoafile.--append-configAPPEND_CONFIGProvideextraconfigfilestoparseinadditiontothefilesfoundbyFlake8bydefault.Thesefilesarethelastonesreadandsotheytakethehighestprecedencewhenmultiplefilesprovidethesameoption.#各位可以在终端自行尝试,查看完整的参数列表和解释不过相比于IDE来说,我们还可以为flake8设置相应的配置文件,通过该文件可以配置选择忽略掉哪些检查项、排除哪些文件等。

我们只需要在包含代码文件的根文件路径中包含一个名为.flake8特殊命名的文件,然后在当中试着以如下方式填写相应的内容:

[flake8]ignore=#F401importedbutunusedF401,#E225missingwhitespacearoundoperatorE225,#E501linetoolongE501,#W292nonewlineatendoffileW292exclude=.git,__pycache__,dist这等价于命令行:

flake8--ignoreF401,E225,E501,W292\--exclude.git,__pycache__,dist\main.py最后输出的结果将会比默认配置下输出的信息输出更为简洁:

$flake8main.pymain.py:10:11:E226missingwhitespacearoundarithmeticoperatormain.py:11:10:W503linebreakbeforebinaryoperatormain.py:11:10:E128continuationlineunder-indentedforvisualindent然后我们只需要根据信息上所示找到对应的代码行数进行修改即可。

由于PEP484提案的出现,开始使得Python也可以像静态类型语言那样为变量、参数或函数返回值标注相应的类型,以便能配合IDE和相应的工具,共同发现代码当中可能存在的逻辑错误或是类型错误等问题,从而改善代码质量并提高程序健壮性。

总而来说,目前Python社区主要有这么以下几个流行的静态类型检查工具(Staictypechecker),根据项目创建日期由远及近为:

这里笔者只以mypy为例,如果读者对于其他的静态类型检查工具有特别偏好,可以自行挑选并阅读官方文档后使用。使用前需要通过pip命令进行安装:

pipinstallmypy简单来说,如果我们希望静态类型检查工具发挥作用,那么就最好编写带有类型注解的Python代码。

这里我们仍然以前面没有添加类型注解的multiply()函数为例:

$mypymain.pySuccess:noissuesfoundin1sourcefile只有当我们为其添加上类型注解,才会发挥mypy应有的作用:

因此针对上述问题我们可以手动预先修改,对于total变量,我们即可以为其添加和返回值一样的类型注解:

defmultiply(numbers:Sequence[Numeric])->Numeric:total:Numeric=1fornumberinnumbers:total*=numberreturntotal当然mypy也提供了一种让我们忽略掉可能被检查到并提示错误的机制,即我们可以通过注释来进行标注:

defmultiply(numbers:Sequence[Numeric])->Numeric:total=1fornumberinnumbers:total*=number#type:ignorereturntotal无论是使用以上哪种方式,最后我们都不会再得到Incompatibletypesinassignment的错误提示了:

默认情况下mypy的检查是相对严格的,也会尽可能地发现Python代码中存在问题的部分;当然这些检查项都会有与之对应的配置项,因此我们如果并不需要那么多提示的检查或提示信息,那么也可以通过配置文件来进行预先设定:

到本小节为止,本章所提及的工具多以命令行的形式使用。但相信有不少和我一样的「懒人」,希望在尽可能不敲命令行的情况下,也能使用到这些工具以帮助我们改善或提高Python代码的质量。

因此最好的方式就是我们能将其整合到一块,然后只需要在每次完成代码时在统一运行、调用即可。

大部分工具或多或少都会存在可供配置的选项,因此整合这些工具配置项的最好方式就是将其全都放在一个配置文件中,比如pyproject.toml:

像Black和isort这样能够实时将代码格式化的工具,我们可以将其整合到开发或编写代码所用的IDE工具中,这样就可以在每次保存代码时自动进行格式化,而不需要我们手动运行。

在VSCode中当我们安装了微软官方的Python插件时,默认就可以在用户设置选项中搜索到关于格式化的有关设置,然后我们只需要:

之后我们再另外勾选VSCode中editor.formatOnSave选项让代码在保存时自动格式化:

注:本小节演示的是PycharmCommunity社区版,而PycharmProfessional专业付费版已经内置了FileWatchers,可以无需安装。

安装完成后我们就需要接着在Pycharm的设置页中找到FileWatchers的设置项,并在当中完成设置:

设置完成之后,我们每次只需要保存代码时就会自动格式化。

除了与IDE整合这样的方式之外,我们还可以将所有工具的执行命令放在一个脚本文件中,每次只需要调用该脚本文件即可执行所有命令。

比如说Shell脚本:

WORKDIR=$PWDisort-v$WORKDIR\&&black--skip-string-normalization-v$WORKDIR\&&flake8$WORKDIR\&&mypy--strict$WORKDIR又比如使用Makefile文件并搭配make构建命令:

本文主要介绍了一些能够提升Python代码质量的工具,比如代码格式化工具、静态检查工具等。

当然不仅是Python,目前主流的编程语言都会有许多配套的工具链或类似的设施。

通过对这些工具的使用一方面可以提高我们代码的可读性与质量,另一方面能够及早发现当中可能存在的某些代码问题从而整体提高程序的健壮性。

THE END
1.Python编程的十大好用工具!python编程软件Python编程的十大好用工具! 来源丨网络 Python一直以来都是程序员们的首选编程语言之一,其灵活性和功能强大的库使其成为解决各种问题的理想选择。在本文中,我们将介绍Python编程的终极十大工具,这些工具可以帮助您在各种领域取得成功,无论您是初学者还是经验丰富的开发者。https://blog.csdn.net/Javachichi/article/details/139856770
2.python开发工具哪个好用?推荐几款主流好用的Python开发工具推荐几款主流好用的Python开发工具 要熟练使用python解决各种问题,开发工具必不可少,其中就包括IDE或者代码编辑器,或者集成的开发编辑器(IDE),一个好的开发工具可以让你事半功倍,接下来好学编程主要介绍python的一些常用的开发工具 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用! https://www.jb51.net/softjc/927153.html
3.python编程软件哪个好用Python教程选择时考虑功能、易用性、兼容性、支持和价格。 Python 编程软件推荐 Python 编程语言功能强大且用途广泛,因此有许多软件可供选择。选择适合您具体需求的软件非常重要。 最佳Python 编程软件 对于初学者和经验丰富的开发人员,最好的 Python 编程软件包括: 1. PyCharm 一个功能齐全的集成开发环境 (IDE) 代码自动完成https://m.php.cn/faq/733265.html
4.python编程软件用什么好?Worktile社区python编程软件用什么好 Python开发推荐使用Visual Studio Code、PyCharm、Sublime Text 3、Jupyter Notebook、Atom,其中Visual Studio Code具有良好的社区支持,丰富的扩展功能,轻量级且跨平台,适合于不同水平的开发者。 Visual Studio Code(VS Code)在Python 开发社区中备受欢迎。其自身搭配了强大的代码编辑功能,如代码https://worktile.com/kb/p/2080252
5.python编程软件下载大全python编程开发工具下载pytPython的学习过程少不了IDE或者代码编辑器,或者集成的开发编辑器(IDE)。这些 Python编程软件帮助用户学习使用Python,提高效率。那么python编程软件有哪些呢,小编给大家整理了一些好用的python编程软件推荐,包括python教程app、Python编程狮、扇贝编程等,软件帮助各位小伙伴足不出户也可以学习编程,省事省力又省钱,还能多掌握https://www.ddooo.com/zt/comicpc.htm
6.PyCharm:适用于数据科学和Web开发的PythonIDEdjango开发者,pycharm是我最好的投资之一.起初我还有些疑虑,但真正体验过之后,我就再也回不到过去了. michael kennedy python爱好者和企业家 ,talk python和 python bytes播客主持人,talk python training创始人,python software foundation fellow. 在我日常使用的工具中,只有一款从根本上改变了我用 python创建和https://www.jetbrains.com/pycharm/
7.经典推荐!10款最好的Python编程IDE,总有一款适合你程序员们除了热衷于探讨哪门编程语言最优秀之外,对于哪款IDE更胜一筹也颇有争议。今日,我们将为大家推荐10款顶级的Python编程IDE,相信总有一款能够成为你的得力助手!首先,让我们来了解一下什么是IDE。 所谓IDE,即集成开发环境,它集成了代码编辑、编译、调试以及图形用户界面工具等一系列功能,助力开发者高效完成软件开https://www.yoojia.com/ask/17-13651380241327212391.html
8.WelcometoPython.orgThe official home of the Python Programming Languagehttps://www.python.org/
9.Python编程软件免费下载对于那些从未学过编程或不是计算机专业的人来说,Python这是最好的选择之一 安装教程 软件下载 必看教程 Python下载 3.9.7 【编程软件】官方正式版 附安装教程32/64位 下载 Python是一种面向对象的直译式计算机程序设计语言,也是一种功能强大、完善的通用语言,已有十多年的发展历史,其发展成熟且稳定。它的https://www.yutu.cn/popsoft_528_1.html
10.Python编程软件有哪些?推荐5款Python编程工具以上是5款最受欢迎的Python编程工具的介绍及使用指南。每个工具都有自己的特色和优点,用户可以根据自己的需求选择最适合自己的工具。无论是初学者还是专业开发者,这些Python编程工具都能够提高您的Python编程效率,帮助您更好地学习和应用Python语言。https://www.jiandaoyun.com/fe/pbcrjynxtj/
11.Python下载Python下载电脑官方版Python官方版是一款相当出色的通用型编程语言。PyCharm官方版适用性极广,被用户广泛应用于各种编程操作,软件还拥有丰富全面的模块,并支持sockets编程,Python便捷好用,可以让您快速地开发分布式应用程序,同时还支持PIL、Tkinter等图形库支持,能方便进行图形处理。喜欢Python的朋友快来华军软件园下载体验吧! https://m.onlinedown.net/soft/1225763.html
12.Python编辑器哪个好用?好用的四大Python编辑器Pycharm是一个跨平台的Python开发工具,是JetBrains公司的产品,是一门非常易学、强大的编程语言。Python的学习过程少不了开发编辑器或者代码编辑器,高效的代码编辑器或者 IDE 应该会提供插件和工具等能帮助开发者高效开发的特性。那么Python编辑器哪个好用?本文为大家推荐几款好用的Python编辑器,大家可以对比参考下选择合https://www.idcspy.com/38667.html
13.初学python编程,有哪些不错的软件值得一用?推荐些适合初学用python编程的软件,有一些软件虽然功能强大,也广受大家认可,但个人不认为适合初学者。比如PyCharm、Anaconda。 IDLE 作为Python默认安装的 ide,基本的功能都有。作为初学者 ,必须掌握它的使用,而不是把时间都花在如何找 PyCharm破解版、激活码这类问题上。IDLE能够正常编写Python代码,而且运行 https://www.jianshu.com/p/afc99128dc76
14.十大编程软件排行榜编程开发工具大全c语言编程软件有哪些→世界上主流的编程语言有C、Java、Python、C++、C#、Visual Basic、PHP等,针对这些编程语言,又有相对应的Visual C++、Visual Studio、Eclipse、Dev-C++、Notepad++、MyEclipse、JDK、Code::Blocks、Gcc、Sublime Text、IntelliJ IDEA、Ultraedit、C-Free等编程软件,被广泛运用,下面跟随maigoo网编辑一起了解下这些编程工具!https://www.maigoo.com/top/419670.html
15.5个用于Python前端开发的工具但是Python在前端开发和UI方面取得了长足进步。在某些情况下,您可以完全删除JavaScript并仅使用Python作为前端。当然,在更改基础架构之前,最好先咨询有经验的软件供应商,如BairesDev。 但是,如果您知道如何编码,则可以通过Python轻松开发基本的前端功能。您还可以更好地估计进行代码更改并相应调整后端所需的时间。此外,您https://www.51cto.com/article/646834.html
16.总结了9个绝佳的PythonDebug工具腾讯云开发者社区有哪些好的Python Debug工具 作为最流行的编程语言之一,大多数Python开发者用来做各种各样的开发。因此,为了获得更好的结果和顺利运行,Debug 对于 Python 项目开发是至关重要的。 下面列出了一些顶级的Python调试工具以及它们的功能,供大家选择,最终你会选择哪一个工具呢? https://cloud.tencent.com/developer/article/2322974