工具
开发环境:https://www.continuum.io/
常用类库
- gensim:http://radimrehurek.com/gensim/index.html
- 文本向量模型:word2vec
- 自然语言处理:http://www.52nlp.cn/
编程规范
命名约定
- 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含);
- 用双下划线(__)开头的实例变量或方法表示类内私有;
- 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块;
- 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式;
- 函数命名使用全部小写的方式,可以使用下划线;
- 常量命名使用全部大写的方式,可以使用下划线;
- 类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线;
- 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls;
类
- 如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.
- 类应该在其定义下有一个用于描述该类的文档字符串. 如果你的类有公共属性(Attributes), 那么文档中应该有一个属性(Attributes)段. 并且应该遵守和函数参数相同的格式.
编码
- 尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x;
- 使用startswith() and endswith()代替切片进行序列前缀或后缀的检查;
- 使用isinstance()比较对象的类型;用 isinstance(obj, cls), 不要用 type(obj) == cls;因为 isinstance 涵盖更多情形,包括子类和抽象基类。同时,不要过多使用 isinstance ,因为通常应该使用鸭子类型!
- 判断序列空或不空:if not seq: 或 if seq:优于 if len(seq) 或 if not len(seq)
- 字符串不要以空格收尾
- 二进制数据判断使用 if boolvalue的方式
- 列表/字典/集合推导式优于 map/filter
评论区