设计思路
- 明确引用层级,同层级间原则上不互相引用
- 如果在一个脚本中需要对大文件进行多次操作,多次存取,使用 debug 则不如将脚本按步骤拆分为多个脚本
- 如果一个流程需要连续跑多个脚本,那么尽量不要将前一个脚本的结果手工写入到写一个脚本的代码中
- 如果需要基于拓扑顺序开发一个流程,那么需要注意:① 应保证拓扑排序结果的稳定性,② 应保证各个流程之间没有相互依赖(否则可能出现偶然发生、难以排查的问题)
开发思路
- 开发完脚本之后,一定要检查脚本运行结果是否满足预期
- 优先使用原生的、功能更简单的方式实现功能;而没必要为了使用 pandas 而使用 pandas。例如如果只是单纯为了写出,则使用原生
csv
库写出 csv 文件而不是使用pandas.to_csv
写出 csv 文件。 - 需要将可能需要调整的设置添加到参数中:诸如 ES 地址、输出路径等
- 逻辑如非必要,不要直接在
.py
文件中开发,而是应该用函数或类封装它们 - 不要在父类中判断是哪个子类,从而区分性地实现子类功能,而是在父类中增加抽象方法,在各个子类中实现它
需要注意的用法:可能带来风险或影响性能
- 如果变量本身表达的就是布尔值,那么应该使用
True
和False
而不是1
和0
- 在请求 ES 索引时,如果只需要档案中的部分字段,则需要添加
_source
进行请求 - 一些打印内容较多的 print 需要关闭
- 如果需要遍历存在于集合
A
而不存在于集合B
的,那么遍历差集(A - B
)的性能将由于遍历并集(A | B
)后,再判断是否只在集合A
中存在 - 根据迭代器初始化集合需要消耗
O(N)
的性能,因此如果集合需要多次使用,则不妨先将集合存储下来 - 如果需要遍历字典的键及对应的值,那么使用
.items()
将获得更好的性能 - 如果需要判断一个值是否在字典的键中,直接判断即可,不需要将字典的键转为集合再判断
- 如果已经确定键存在于字典中,则没有必要使用
get
方法 - 如果我们频繁地获取某个路径较深的元素,不妨直将将其拿出来,以降低每次从路径中获取消耗的性能
编码规范
- PyCharm 需要使用
Ctrl + Alt + L
代码自动格式化 - 不要用
== True
或== False
,而应该用is True
和is False
- 不应该使用 Python 内置名称作为变量名,例如
id
- 一些不需要的注释掉的代码需要及时删掉
- 未变量和逻辑需要删掉
- 需要增加文件头的注释
- 如非必要,不要同时使用单引号和双引号
A if condition else B
语法
- 习惯上,A 应该是正常情况,B 应该是异常情况
- 习惯上,不应使用单行判断语法执行两层或两层以上的条件判断
- 习惯上,不应使用单行判断进行累加等操作
- 尽量不要使用
\
这行,而是使用()
隐式换行 - 如果只是需要遍历字典的键,那么不需要加
.keys()