代码风格和规范
PEP 8 规范
Python 的编码风格广泛遵循一种名为 PEP 8 的风格指南。PEP 8,即 Python Enhancement Proposal 8,是一个官方文档,描述了 Python 代码的编写约定,目的是提高 Python 代码的可读性和一致性。
这个规范非常详尽,条目繁多,这里提取一些最主要的指导原则:
- 缩进: 使用 4 个空格进行缩进,不建议使用制表符(Tab)。每级缩进应为 4 个空格。
- 行宽: 每行代码建议不超过 79 个字符,这样有利于在小屏幕上查看,也便于并排放置多个文件。对于长的表达式,应适当换行,并保持逻辑上的连贯。
- 空行: 顶层定义之间空两行,如类定义。方法定义之间空一行。在函数中也应该添加必要的空行来区分逻辑段落。
- 导入: 导入语句应该分行书写。导入顺序:标准库导入、相关第三方导入、本地应用/库特定导入,每一组之间用空行分隔。建议每行只导入一个模块。但对于从模块中导入具体对象(如 from subprocess import Popen, PIPE),可以在一行中导入多个名称。
- 空格: 赋值(
=)、比较(==,!=等)、算术运算符(+,-等)的两侧通常应各添加一个空格。例外情况: 在函数的参数列表中,用于指定默认值或关键字参数的=号两侧不应有空格(例如:def func(key=value):)。函数参数列表、索引或切片的括号内侧也不应有空格。 - 注释: 注释应当与其描述的代码相同缩进。注释应该是完整的句子。如果注释是短语或句子,其首字母应大写,除非是以代码内的标识符(即代码内变量等)开始。函数、类或模块的第一行通常使用三引号(
"""...""")格式的字符串作为文档字符串(Docstring),用于说明其功能。代码逻辑的解释性注释则使用#号格式。 - 命名: 类名通常使用首字母大写、无下划线的 CamelCase 风格。函数名和变量名通常使用小写、用下划线分割单词的 snake_case 风格。常量通常使用全大写字母 UPPER_CASE 风格。
- 语句:每一行只写一条语句,不要使用分号。
自动格式化代码
现在有很多工具可以帮我们自动化格式化程序代码,让代码风格保持一致,提高代码可读性。这些工具可以自动地调整代码的格式,如缩进、空格、换行等,使代码更加整洁和标准化。
PyCharm 自带的代码格式化工具
PyCharm 是一款流行的 Python 集成开发环境(IDE),提供了许多强大的功能,其中包括代码自动化格式化。PyCharm 自带了代码格式化的功能,可以轻松地对代码进行格式化,使其符合PEP 8等编码规范。
如果需要手动格式化一个 Python 文件,可以在打开的 Python 文件中,选择 Code -> Reformat Code 或使用快捷键(在大多数情况下是 Ctrl+Alt+L 在Windows/Linux上,Option+Command+L 在MacOS上)。然后文件就会被按照规范格式化。
我们也可以设置自动在保存时格式化文件,这样就不需要手动调整了。进入 File -> Settings(或 PyCharm -> Preferences 在 MacOS 上)。在 Tools -> Actions on Save 中,勾选 Reformat code 选项,就可以让 PyCharm 自动格式化代码文件。
使用第三方的代码格式化工具
如果觉得 IDE 自带的工具不够好,我们还可以使用其它一些工具对代码进行格式化。此外,在 VSCode 中,微软推荐使用独立的格式化扩展。点击左侧扩展图标,搜索并安装 "Black Formatter" 扩展(由 Microsoft 发布)。安装完成后,在设置中将 Default Formatter 选为 Black Formatter 即可使用。
常用的代码格式化工具有很多,比如 Black、Flake8、autopep8 和 YAPF 等等。以 Black 为例,我们在使用它之前需要先安装:
pip install black
在 PyCharm 中,进入 File -> Settings -> Tools -> External Tools。点击 "+" 添加新工具。在 “Name” 字段中输入工具名(Black)。在 “Program” 字段中输入工具的路径(可能需要在终端中运行 which black(MacOS/Linux)或 where black(Windows)来找到路径)。在 “Arguments” 字段中输入 。在 “Working directory” 字段中输入 。完成后,就可以通过 Tools -> External Tools -> Black 来运行 Black 格式化。
在 VSCode 中 的设置也比较类似,点击 VSCode 左侧边栏的扩展图标。搜索 “Python” 并选择由 Microsoft 发布的 Python 扩展,点击安装。然后选择格式化工具如 Black。之后就可以使用了。
The Zen of Python
运行如下代码:
import this
就会看到它的输出是一首诗:
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
这段文字是《Python 禅意》,由 Tim Peters 所著。《Python 禅意》包含了许多对 Python 编程风格和哲学的深刻见解,强调了简洁、可读性和明确性的重要性。其中文翻译大致如下:
美胜丑陋明胜晦,简胜繁复逸胜乱。扁平优于层层叠,疏散胜于密密缠。
可读性高当第一,特殊不足破常规。错误岂可默然过,除非真需如此为。
面对疑惑不妄猜,做事有法一二三。虽道隐显难察觉,须知心中自有涯。
为人行事贵在做,但勿鲁莽任意行。若成难解或不妥,易解之理或为佳。
命名空间大智慧,善用自然效率高。大道至简行其本,清风朗月任逍遥。
下面是 Pythora 星球居民对这首诗的理解:
美观
Python 代码的美观性不仅提高了代码的可读性,也反映了一种编程艺术性。 清晰、整洁且一致的代码更易于理解和维护。
代码可读性是编程中的一个重要方面,尤其在团队合作和长期维护的项目中尤为重要。可读性好的代码类似于良好的故事叙述,它清晰地表达了程序的意图和逻辑。下面这段代码的可读性就不是太好:
def calc(x,y):return x/2*y
result=calc(5,7)
print(result)
上面这段代码主要的问题在于采用了过于简略的函数名变量名等,如果改用有意义的更清晰的名称,不但可以让程序更容易理解,而且直观视觉也会更顺眼:
# 方案一:计算矩形面积(与 length/width 对应)
def calculate_rectangle_area(length, width):
return length * width
# 方案二:计算三角形面积(与公式对应)
def calculate_triangle_area(base, height):
return base * height / 2
改进的程序,不仅仅是使用了有意义的函数变量名,在命名风格也有改进。使用一致的编码风格有助于团队成员更好地理解和维护代码。遵守统一的编码标准可以提高代码质量。另一个改进是添加了一些额外的空格和空行。因为过于密集的代码会降低可读性。合理使用空格和空行可以让代码更加清晰。Python 允许在一行写多个语句,但是这样代码就会显得太过密集,比如:
if condition:do_action1();do_action2()
如上的代码应该始终拆为多行:
if condition:
do_action1()
do_action2()