写美观和明确的代码可以帮助更好地理解代码的意图和功能,使得以后的维护和更新工作变得更加容易。此外,美观和明确的代码也可以让其他人更容易阅读和理解你的代码,这对于团队协作或代码复用来说非常重要。
一、为什么Python代码要写得美观而明确
写美观和明确的代码可以帮助更好地理解代码的意图和功能,使得以后的维护和更新工作变得更加容易。此外,美观和明确的代码也可以让其他人更容易阅读和理解你的代码,这对于团队协作或代码复用来说非常重要。最后,美观和明确的代码也可以帮助降低出错的概率,因为编写易读的代码可以使你更容易发现错误或潜在的问题。
所以,不仅仅是python,其他语言也是一样。这是一个态度,也是一个提高自己的方法,是一个循序渐进的而过程。
核心准则
缩进
优选使用4个空格。
目前几乎所有的IDE都是默认tab转为4个空格,没有大问题。
行的最大长度
79个字符。
曾经笔者认为这是个“过时”的建议,目前做开发基本都是大屏幕,写代码全屏的时候编辑器足以容纳120字符一行或者更长。但是如果要在web上比较两次提交的代码差异,显然是会导致代码换行,或者如果左右滑动,增加了比较的难度,在多年实践之后(2016-2020),所以目前还是使用建议的最大行长度。
导入
导入位于文件顶部,在文件注释之后。 导入通常是单独一行。
# Correct:
import os
import sys
# Wrong:
import sys, os
或者这样也是可以的:
# Correct:
from subprocess import Popen, PIPE
导入应该按照以下顺序分组:
- 标准库导入
- 相关的第三方导入
- 特定的本地应用/库导入 在每个导入组之间放一行空行。 推荐绝对导入,因为它们更易读;处理复杂包布局时明确的相对导入可以用来替代绝对导入,因绝对导入过于冗长。
此外,根据实践经验,建议移除所有不必要的imports。
其他如有细节问题,查看文档
导入这部分,通过Python库isort可以完美解决(vscode默认使用isort),在vscode中isort的默认参数便完全符合上面的编码规范,这里介绍笔者一些个人的风格设置,通过设置isort的参数可以实现:
- 当from .. import …超过行长度限制时,重新起一行:–sl/–force-single-line-imports
- 强制通过包名排序:–fss/–force-sort-within-sections
并可设置为保存时自动排序imports,在vscode中配置为:
{
“editor.codeActionsOnSave”: {
“source.organizeImports”: true
},
“python.sortImports.args”: [
“–force-sort-within-sections”,
“–force-single-line-imports”
],
}
4 注释
切忌注释和代码不一致!!,这比没有注释更让人抓狂。 主要遵守以下要点:
- 修改代码时,优先修改注释;
- 注释应该是完整的句子。所以名列前茅个单词首字母必须大写,除非是名列前茅个单词是小写字母开头的标识符;
- 短注释可以不加句号结尾,完整句子的注释必须要句号结尾;
- 注释每行以一个#加一个空格开头;
- 块注释需要使用相同级别的缩进;
- 行内注释则必须用至少两个空格和代码隔开;
- 尽量让你的代码“会说话”,不写不必要的注释。
文档字符串(a.k.a. “docstrings”)
为所有公共模块,函数,类和方法书写文档字符串。细节可以查看PEP 257。
对于docstrings,CLion有很好的支持,vscode可以通过插件实现Python Docstring Generator:
- 插件管理器搜索Python Docstring Generator安装即可
- 使用方法很简单,在函数名后换行快捷键Ctrl+Shift+2即可,或者输入”””敲换行时也会自动添加
该插件默认使用的风格是Google,通过对比一些开源算法库的文档,使用Google风格的比如TensorFlow,PyTorch,其文档的可读性并不如使用numpy风格的NumPy和SciPy,因此建议使用numpy风格。
延伸阅读:
二、python的可扩展性
可扩展性是属于 Python 的其他特性之一。在必要时,可以用其他语言编写 Python 代码的一部分,例如 C++。因此,Python 是一种可扩展的语言,这意味着它可以被扩展到其他语言。Python 可扩展的特性是指 Python 的部分代码可以用 C 或 C++ 来编写。这并不能增强语言 (语法、结构等等),但是它可以让你把 Python 和其他语言开发的库连接起来。这就是说,你可以将以其他语言编写的代码包含在你的 Python 源代码中。