1. 总体原则:
- 1. 命名和用途一致
- 2. 能够望文生义
- 3. 同一模块命名风格统一
2. 软技能
- 有意义的命名
a. 变量名能够精准的反映他的含义和内容(变量名,通常是名词 或 名词短语)。
b.方法名能够准确的表达该方法的行为(方法名,通常是动词 或 动宾结构)
如:insert、append比add更能精准的表达含义; 尽可能使用email代替emailAddress,因为后者并未提供比前者更多的信息
c. 方法参数名能够自解释(即没有文档的情况下,能够自解释)
d. 避免无意义的命名
- 对变量采用具体含义的单词命名。
即不采用过于抽象、广泛的单词命名。如:get()有些抽象,不够具体。
# 一个好的例子:
def get_book_price() # 简单的返回数据
def fetch_book_list() # 从远程获取数据
def load_book_context() # 从其他地方加载数据
- 3.易读性
- 可读性强、易懂,尽量不要用缩写或简写单词。除非公认的缩写单词。
- 名称过长或过短,易读性都很差。
- 不同代码段采用不同命名长度
- 通常循环计数器采用一个词命名;
- 循环判断变量采用一个词命名;
- 方法采用1-2个单词命名;
- 类采用2-3个单词命名;
- 全局变量采用3-4个词命名;
- 一致的命名风格
a. 符合语言本身的命名规范要求
b. 和当前模块的命名风格保持一致,即命名统一
c. 符合公司的编码规范要求
- 好的代码几乎不需要注释
这是优雅代码、可读性强代码的终极追求目标。(注释越多意味着代码可读性越差)
3. 硬技能
-
一些约定:
- 命名尽量使用全拼单词。常用缩写(如:xml、id),约定俗称缩写除外,如:
名称 | 缩写 |
---|---|
function | fn |
text | txt |
object | obj |
context | cnt |
number | num |
- 下划线的用法
a. 前导下划线,表示私有。 如: private_func
b. 后缀下划线,避免关键字冲突。如: id
c. 两个前导下划线,避免继承时类属性重名冲突。如: __class_var
d. 两个前导和后缀下划线,特殊用途的对象或属性。 仅使用,不创造。
-
规则:
- 模块名&包名
尽量短小,全部使用小写,模块命名允许使用下划线,使用名词;【强制】
#好的命名
import decoder
import html_parser
#不好的命名
import Decoder
2.类名
a. 采用名词,驼峰命名法,首字母大写,多个词组合时每个词的首字母大写;【强制】b.名称中有缩写名词时缩写名全大写。如HTTPServerError优于HttpServerError
c. 异常类名建议使用CapWords+Error后缀的方式;【强制】
d. 私有类,用下划线开头
# 好的命名:
class WSGIInterfaceError():
pass
class AnimalFarm():
pass
class _PrivateFarm():
pass
# 不好的命名:
class WsgiInterfaceError():
pass
class kill_apple(killfood):
pass
- 函数名
a. 函数命名采用动宾结构,各个词中间采用下划线隔开,不使用少于三个字符的函数名字;【强制】
b.私有函数,下划线开头
#好的命名:
def create_dvs():
pass
def get_dvs_by(id):
pass
def _filter_vr_by(filters):
pass
# 不好的命名:
def get_bvs_id_from_dvs_id(dvs_id): # 好的命名 def get_bvs_id_by(dvs_id)
pass
- 变量名
a. 使用全小写加下划线,不使用单个字符或缩写字符的变量名;【强制】
b. 禁止使用全局变量,采用类加静态变量的方式实现;【强制】
c. 变量名字不能隐藏内部名字(内部变量优先于外部变量);【强制】
d. 有文档辅助的接口,比如sdk,命名应当短小精练,不能带类型,在业务流程代码,缺少文档的命名,比如局部变量,文件全局变量,应该有类型标识;【建议】
e. 若与关键字名字冲突,后缀一下划线,如:id_。[建议]
f.尽量不使用缩略等其他方式。【建议】
- 常量命名
使用全部大写的方式,可以使用下划线.【强制】