当你想解决代码复杂性问题时,Pylint是你的朋友。Pylint是更高级别的Python风格执行器。而flake8和black检查“原生”样式:诸如换行符位置、注释格式、发现注释掉的代码或日志格式中的不良做法。默认情况下,Pylint非常激进。它将对所有事情提供严厉的意见,从检查声明的接口是否实际实现到重构重复代码的可能性,这对新用户来说可能很多。将此引入项目或团队的一种温和方法是首先关闭所有检查器,然后一个一个地启用它们。如果您已经在使用flake8、black和mypy,这将特别有用:Pylint有很多跳棋,它们在功能上有重叠。然而,Pylint的独特功能之一是能够执行更高级别的关注点:例如,函数的行数或类中的方法数。这些数字可能因项目而异,并且可能取决于开发团队的偏好。然而,一旦团队就参数达成一致,使用自动化工具来强制执行这些参数就非常有用。这就是Pylint的亮点所在。配置Pylint要从空配置开始,将.pylintrc设置为[MESSAGESCONTROL]disable=all这将禁用所有Pylint消息。由于其中许多是多余的,因此这是有道理的。在Pylint中,消息是一种特定类型的警告。您可以通过运行pylint确认所有消息都已关闭:$pylint通常,向pylint命令行添加参数不是一个好主意:配置pylint的地方是.pylintrc。为了让它做一些有用的事情,我们需要启用一些消息。要启用消息,请在[MESSAGESCONTROL]下的.pylintrc中为看起来有用的“消息”(Pylint称之为不同类型的警告)添加enable=,...。我最喜欢的包括太多的行、太多的参数和太多的分支。所有这些都限制了模块或功能的复杂性,并允许在没有人为干预的情况下进行客观的代码复杂性测量。检查员是消息的来源:每条消息都属于一个检查员。许多最有用的消息都在设计检查器下。默认数字通常很好,但调整最大值很容易:我们可以在.pylintrc中添加一个名为DESIGN的部分。[DESIGN]max-args=7max-locals=15另一个有用的信息来源是“重构”检查器。我启用的一些最喜欢的消息是consider-using-dict-comprehension、stop-iteration-return(它将寻找停止迭代的正确方法是return和使用raiseStopIteration的迭代器)和chained-comparison,这将被推荐给使用诸如1<=x<5之类的语法,而不是不太明显的1<=x&&5>5。最后一个在性能方面昂贵但非常有用的检查器是相似性。它在代码的不同部分之间寻找复制粘贴以强制执行“不要重复自己”(DRY原则)。它只启用一条消息:重复代码。默认的“最小相似行数”设置为4。可以使用.pylintrc将其设置为不同的值。[相似之处]min-similarity-lines=3Pylint让代码审查变得容易并且只需要一个项目复杂性标准的参数。