pep8规范
一.为什么要有编码规范
规范的代码给人的第一感觉是【美观】,美的东西总是更加的吸引人,也愿意观看。不规范的代码风格总是令人感到难受,检查会很困难。
所以美观带来的是代码的【可读性】强,想一想你写的代码可读性非常高,是不是检查起来容易,维护起来也更加容易,所以可读性强带来
的是代码的【可维护性】强。最终你的代码【健壮性】高,不容易出BUG,即使出了也较容易解决。代码绝不是只要运行成功就可以了,从长
远看,一定是易于维护的代码,才是对整个项目是最有利的代码。编写规范的代码是程序员必须养成的习惯。
二.代码编排
- 缩进4个空格,禁止空格与Tab混用
- 每行最大长度80字符,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车,防止单行国语复杂的import
- 不使用 from xxx import * 这种语法
- 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
三.文档编排
1.顺序
模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。 其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。 1. 单行不要 import 多个库 第一层:标准库 第二层:第三方库 第三层:自定义库 2. 模块内用不到的不要去 import import os import sys from django.conf import settings from django.core import xxx from user.models import User from user.models import Perm
2.冲突
如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX from myclass import MyClass from foo.bar.yourclass import YourClass # 如果和本地名字有冲突: import myclass import foo.bar.yourclass
四.空格及空行的使用
1.空格
- 问号和逗号后面跟一个空格,前面无空格。
- 二元操作符前后各一个空格,包括以下几类:
- 数学运算符 + - * / // = & |
- 比较运算符 == != > < >= <= is not in
- 逻辑运算符 and or not
- 位运算符 & | ^ << >>
- 当=用于只是关键字参数或默认参数值时,不要在其两侧使用空格(函数默认参数使用的赋值符左右省略空格。)
2.空行
- 函数间:顶级函数间空2行,类的方法之间空1行
- 函数内:同一函数内逻辑块之间,空一行
- 文件结尾:留一个空行
- if/for/while语句中,即使执行语句只有一句,也必须另起一行。
五.注释
- 两点需要避免:①逐行添加注释②没有一个注释
- 行尾注释:单行逻辑过于复杂时添加
- 块注释:一段逻辑开始时添加
- 引入外来算法或者配置时须在注释中添加源连接,标明出处
- 函数、类、模块尽可能添加docstring
六.命名
- 好的变量名 要能做到"词能达意"
- 除非在lambda函数中,否则不要使用单字母的变量名(即使是lambda函数中的变量名也要尽可能的有意义)
- 包名、模块名、函数名、方法、普通变量名全部使用小写, 单词间用下划线连接
- 类名、异常名使用 CapWords (首字母大写) 的方式, 异常名结尾加
Error
或Wraning
后缀 - 全局变量尽量使用大写, 一组同类型的全局变量要加上统一前缀, 单词用下划线连接
- 函数名必须有动词, 最好是 do_something 的句式, 或者 somebody_do_something 句式
- 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
- mixedCase(混合大小写,第一个单词是小写)
七.常见的编码建议
1. 自定义的变量名、函数名不要与标准库中的名字冲突(我干过)
2. cpython中join效率比较"+",效率高
3. 尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。
4. 使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。比如
if foo.startswith('bar'):优于
if foo[:3] == 'bar':
5. 使用isinstance()比较对象的类型。比如
if isinstance(obj, int): 优于
if type(obj) is type(1):
6. 判断序列空或不空,有如下规则
if not seq:
if seq: 这两种由于判断他们的长度值
7. 字符串不要以空格收尾。
8. 二进制数据判断使用 if boolvalue的方式。
9. 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。
异常中不要使用裸露的except,except后跟具体的exceptions。
异常中try的代码尽可能少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构