title: 我的编码规范
date: 2015-07-19 16:31:54 categories: [Python] tags: [Python, CodeStyle] ---开篇闲扯
距离上一次更新已经有快三个月了,这三个月我都在干什么呢?首先是继续实习,因为一些原因,本来计划的三个月实习变成了四个月。在实习的过程中逐步接手了一些维护的工作,并提交了不少代码。7月6号正式入职以后,我加入了一个Amazing的新项目的创建,目前我们做出来的Demo真是非常的Amazing。不过可惜的是,这样一个项目在最近几年是不会对外公布的。
在6月之前,每晚回家就是做毕设了,这段时间休息的都比较晚,头发都白了很多。
还有就是给极客学院录课,第一个系列课程《定向爬虫入门》已经全部录制完毕了,一共8课,大家可以在about me 里面找到前7课的链接,最后一课目前正在后期制作当中,上线以后会更新链接。接下来我会讲解远程控制软件的编写,欢迎大家在极客学院关注我,我的名字叫kingname~
闲话完毕,那我们开始正题。
本题由来
其实以前我是不太注意编码风格的,觉得程序可以运行了就行。甚至网上还有一种说法:
如果你急急忙忙写一个程序,都没有注重编码规范,程序可能一次就跑通了;但是如果你仔细编码,而且还把单元测试做的非常完善,很有可能程序会出现大bug,而且还难以找到原因。
然而在我实习的过程中,读了公司的很多代码,才发现编码规范是如此的重要,以至于可以显著影响对代码的理解。而且由于在部门里面code review做的比较严格,因此代码的风格不统一的话,是不能merge的,于是在多次提交代码以后渐渐的总结出了一些规律。
变量命名
在我大一学编程的时候,老师告诉我们变量命名最后使用匈牙利命名法,例如,经常出现hszStr、istuNum之类的变量名,如果对代码不熟悉的话,都不知道是什么意思。
现在我们并不使用匈牙利命名法,而是直接将变量的含义通过单纯完整拼写处理。例如:
deviceSerialDict: 用于保存设备串号的字典
deviceSerialDictList: 用于保存设备串号字典的列表 unusedSerialNumList: 未使用的序列号列表
我们约定:
- 变量名首字母小写
- 多个单词的构成的变量,从第二个开始首字母大写
- 缩写词做单词处理,例如ACM在变量名中应该写为Acm而不是ACM
- 常量大写,每个单词使用_下划线分割
- 不允许出现Magic Number
- 使用名词或者动宾结构
类与方法
使用面向对象编程,这一点在我做毕业设计的程序时,帮了我大忙,大大减轻了我的工作压力。
我们的风格其实有点像Java了,文件名和类名相同,如果一个文件里面有多个类,那文件名与主要的类名相同。
我们约定:
- 非私有的方法,首字母小写,动宾结构,例如getSerialNum
- 对于和类本身没有什么大关系的方法,要使用@staticmethod
- 只有类自己使用的方法需要设为私有,也就是名称前加两个下划线
代码细节
- 逗号后面要有一个空格
- 每一行代码后面不能有空格
- 文件的最后要有一个空行
- 等号左右都需要有空格,但是作为参数的时候不需要空格
- 方法的参数大于6个,则使用列表或者字典来传递
总结
挂一漏万,以上的规范使用Pylint都可以帮忙检查出来。没有说到的地方请大家补充,除了以上的规范以外,还有Python自己本身的编码规范,请戳->。
最近重构了MCC,请大家对比
与 重构之前
的区别。