博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的编码规范
阅读量:5255 次
发布时间:2019-06-14

本文共 1555 字,大约阅读时间需要 5 分钟。

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,请大家对比

与 重构之前

的区别。

posted on
2015-10-07 19:19 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/xieqiankun/p/mycodestyle.html

你可能感兴趣的文章
slab分配器
查看>>
数据清洗
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>