代码质量帮助提示和技巧,或者如何使您的代码看起来漂亮?
最后修改时间:2023 年 10 月 18 日本教程的内容
本教程旨在逐步引导您使用 PyCharm 的代码智能功能在 Python 项目中创建源代码。您将看到 PyCharm 如何帮助您的源代码保持完美状态,并具有适当的缩进、空格、导入等 - 实际上,您将看到 PyCharm 本身是一个代码质量工具。
Python 编程超出了本教程的范围。关于Python语言的更多信息,请参考官方网站。
在你开始之前
确保:
您正在使用 PyCharm 5.0 或更高版本。如果您仍然没有 PyCharm,请从此页面下载。要安装 PyCharm,请按照说明进行操作,具体取决于您的平台。有关详细信息,请参阅产品文档。
您已经创建了一个 Python 项目(文件|新项目...)。有关详细信息,请参阅产品文档。
您已经创建了两个目录src和test_dir(File|New或)。AltInsert
您已将 Python 文件添加到项目的src和test_dir目录中( File|New或)。有关创建文件的更多信息,请参阅填充项目部分。AltInsert
突出显示代码风格违规
创建一个新的 Python 文件src/Solver.py 。创建的文件立即打开进行编辑。默认情况下,该文件没有内容 - 这是因为文件Solver.py是由文件模板创建的,该文件模板(在 Python 文件的情况下)不包含任何内容。AltInsert
接下来,开始输入关键字class
。当您刚开始输入时,PyCharm 会立即显示建议列表以完成您的代码:

有关更多信息,请参阅产品文档的代码完成页面。
红色曲线标记下一个预期条目 - 在本例中,这是预期的标识符。输入班级名称Solver
。红色曲线在类名之后移动。如果将鼠标悬停在该曲线上,您会看到错误描述(“预期冒号”)。另外,请注意右侧装订线中的红色错误条纹 - 它也标记了相同的错误:

好的,输入冒号,然后按。根据Python代码风格,下一条语句是缩进的。如果您偶然在 后按空格,则会违反代码风格设置。EnterEnter
调整 PEP8 检查
然而,默认情况下,这些违规行为只是弱警告,因此不可见。因此,首先让我们提高它们的重要性。单击主工具栏上的“设置”对话框的“检查”页面上,键入 PEP8 以查找所有与 PEP8 相关的检查,然后从“严重性”下拉列表中选择“警告”:

应用更改并关闭对话框。现在让我们回到我们的源代码。
跟踪 PEP8 规则
现在 PyCharm 展示了它的最佳状态!它随时保护您的代码风格完整性。您立即注意到缩进空格突出显示,并且当您键入下一条语句(例如 )时def demo(self,a,b,c):
,PyCharm 将显示来自 PEP8 检查的消息:

因此,如您所见,PyCharm 支持PEP8作为官方 Python 风格指南。如果您浏览检查列表 ( - Inspections ),您将看到 PyCharm 在您的代码上启动pep8.py工具,并查明代码风格违规。CtrlAlt0S
代码检查及其设置
顺便说一句,更仔细地看看检查。如果您刚刚打开此页面,则引用具有默认设置的默认检查配置文件:这意味着检查适用于当前项目的所有源。
让我们尝试为两个不同的范围自定义此配置文件:
在测试范围内,拼写错误应标记为拼写错误(绿色)
在生产范围中,拼写错误应标记为错误(红色) - 我们实际上可以生成带有拼写错误的代码吗?
就是这样完成的...
创建范围
首先,我们来定义两个范围。为此,请单击主工具栏上的 ,在“设置”对话框中展开节点“外观和行为”,打开页面“范围”。然后单击
并选择范围类型Local。
在“添加新范围”对话框中,键入范围名称 (Test),然后在项目树中选择要包含在“测试”范围中的目录test_dir。请注意,当您包含目录时,模式字段会自动填充:

重复此过程以创建 Production 范围。
使用这些范围创建检查配置文件
接下来,让我们创建默认配置文件的副本(尽管此配置文件是可编辑的......只是为了安全起见):

并为其指定一个新名称,例如 MyProjectProfile。这个新配置文件是默认配置文件的副本,并且具有相同的检查集。
选择这个新的配置文件后,让我们找到拼写检查并更改它。要查找拼写检查(我们之前已经做过),只需spel
在搜索区域中键入即可。
下一步是什么?单击“在所有范围内”按钮,然后从列表中选择“测试范围”;对生产范围重复相同的操作

在“测试”范围中,检查严格程度保持原样(拼写错误);但是,对于“生产”范围,我们将从严重性列表中选择“错误”:

注意检查的颜色代码。如果未更改,它们将显示为黑色。如果它们是蓝色的,则意味着它们已被更改。
应用更改并关闭对话框。
这样,修改后的检查配置文件就准备好了。它的名称是Project Default (copy),并且它在测试和生产范围中的拼写检查有不同的设置。接下来,让我们根据此配置文件检查代码。为此,请在主菜单上选择“代码”|“检查代码”,然后在对话框中选择所需的配置文件和范围:

执行两次 - 对于测试和生产范围(如果您想保留检查结果以供进一步检查和共享,您可以导出它们)。探索结果:

突出显示错误
除了编码风格违规之外,PyCharm 还会突出显示其他错误,具体取决于所选的配置文件。
例如,如果您的检查配置文件包含 Python 检查未解析的引用,并且您使用尚未导入的符号,则 PyCharm 会强调未解析的引用并建议添加导入语句:

欲了解更多信息,请参阅这篇文章。
生成源代码
PyCharm 提供了很多自动生成代码的可能性。您可以在产品文档中探索自动生成功能。让我们探讨一下主要的代码生成过程。为此,只需删除文件Solver.py的所有内容,然后从头开始。
首先,创建一个类的实例:

接下来,按并选择意图操作创建类“Solver”:AltEnter

伟大的!PyCharm 已经删除了一个类:

接下来,让我们向类实例添加一个方法。为此,请在类实例后键入一个点,然后键入方法名称。此方法尚不存在,PyCharm 建议创建一个:

让我们做一些手动工作 - 输入源代码。当计算判别式时,我们必须提取平方根。sqrt
库中有一个专用函数math
,但尚未导入。好吧,我们还是输入一下吧,看看 PyCharm 是如何处理的。按并选择导入“数学”:AltEnter

所以,我们得到了这样的源代码:
import math
class Solver(object):
def demo(self,a,b,c):
d = b ** 2 - 4 * a * c
disc = math.sqrt(d)
root1 = (- b + disc) / (2 * a)
root2 = (- b - disc) / (2 * a)
print (root1, root2)
return root1, root2
然而,它缺乏一些重要的分析。我们想分析被数d
。如果为零或正数,则计算判别式和方程根;当被数为负时,我们提出一个例外。PyCharm 将如何帮助完成这项任务?
让我们用构造包围一段代码if
。选择要完成的语句,当d
为非负时,然后按(或在主菜单上选择Code | Surround with ):CtrlAlt0T

if
从建议列表中选择选项。如您所见,PyCharm 自动添加if True:
和缩进所选行:

我们对布尔表达式根本不感兴趣,所以让我们将 selected 更改True
为d >= 0
. 接下来,将插入符号放在最后一行的末尾,然后按。插入符号位于下一行,与语句具有相同的缩进;输入,然后查看 PyCharm 报告有关预期缩进的信息:Enterif
else: clause here

当您再次按下时,插入符号将停留在缩进位置。您可以在此处使用 PyCharm 强大的自动代码完成功能输入异常表达式:Enter

重新格式化代码
让我们再看看Solver.py文件。它的右侧排水沟显示出黄色条纹。当您将鼠标悬停在条纹上时,PyCharm 会显示代码中相应问题的描述:

好消息是它们只是警告,不会影响结果。坏消息是它们数量太多,无法一一修复。是否有可能使源代码变得漂亮而不需要太多麻烦?
PyCharm 说 - 是的。这是代码重新格式化功能。因此,让我们尝试更改整个文件的格式。为此,请按(或在主菜单上选择“代码”|“重新格式化代码”):CtrlAlt0L

现在看看代码 - 与 PEP8 相关的缺点都消失了。
请注意,您可以自己定义格式规则。为此,请打开代码样式设置,选择语言(在本例中为 Python),然后进行必要的更改:

添加文档注释
好的,现在格式已修复,但仍然存在一些条纹。不可避免的黄色灯泡显示了添加文档字符串注释的可能性:

选择此建议并查看添加的特定参数的文档字符串注释:

请注意,您必须在 编辑器设置的“智能键”页面中选中“在文档注释字符串中插入类型占位符”复选框:

有多种文档字符串格式,文档注释以您在Python 集成工具页面中选择的格式创建。如果您愿意,可以将文档字符串格式更改为 Epytext 或纯文本。
类型提示
文档注释可用于定义预期的参数类型、返回值或局部变量。为什么我们需要这一切?例如,我们希望控制传递给方法的参数类型demo()
。为此,我们将相应的信息添加到文档注释中(顺便说一句,请注意文档注释中的代码完成!):

接下来,当您查看方法调用时,您会发现 PyCharm 的检查类型检查器突出显示了错误的参数:

在 PyCharm 文档中了解有关类型提示的更多信息。
感谢您的反馈意见!