Open Valuebai opened 4 years ago
比如处理excel报表等直接用pandas提供的函数非常方便,我经常看见还是有人自己写一堆恶心的处理函数而不用pandas。如果自己造轮子确保测试和文档,否则后续维护和上手会有很大成本。
用sentry等工具记录异常,有利于排查问题(能保存堆栈和现场信息)。切记不要轻易吞掉非预知异常,一旦出现问题不好排查,笔者之前维护的项目曾踩过坑,后来笔者引入了sentry排查问题方便很多。
如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.
Yes: class SampleClass(object):
pass
class OuterClass(object):
class InnerClass(object):
pass
class ChildClass(ParentClass):
"""Explicitly inherits from another class already."""
继承自 object 是为了使属性(properties)正常工作, 并且这样可以保护你的代码, 使其不受 PEP-3000 的一个特殊的潜在不兼容性影响. 这样做也定义了一些特殊的方法, 这些方法实现了对象的默认语义, 包括 new, init, delattr, getattribute, setattr, hash, repr, and str .
No: class SampleClass:
pass
class OuterClass:
class InnerClass:
pass
每个导入应该独占一行
Yes: import os
import sys
No: import os, sys
即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中.
在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if name == 'main' , 这样当模块被导入时主程序就不会被执行.
def main():
...
if __name__ == '__main__':
main()
【命名规范】不知道怎么起名字,查询这个 https://unbug.github.io/codelf/
【在列表/集合/字典中查找一个项】 有时我们需要在集合体中查找。让我们看看这两个选择:列表和集合(set)。
用如下代码举个例子:
s = set(['s', 'p', 'a', 'm'])
l = ['s', 'p', 'a', 'm']
def lookup_set(s):
return 's' in s
def lookup_list(l):
return 's' in l
即使两个函数看起来完全一样,但因为 查找集合 是利用了Python中的集合是可哈希的 特性,两者的查询性能是非常不同的。为了判断一个项是否在列表中,Python将会查看 每个项直到它找到匹配的项。这是耗时的,尤其是对长列表而言。另一方面,在集合中, 项的哈希值将会告诉Python在集合的哪里去查找匹配的项。结果是,即使集合很大,查询 的速度也很快。在字典中查询也是同样的原理。想了解更多内容,请见 StackOverflow 。想了解在每种数据结构上的多种常见操作的花费时间的详细内容, 请见 此页面。
因为这些性能上的差异,在下列场合在使用集合或者字典而不是列表,通常会是个好主意:
集合体中包含大量的项 您将在集合体中重复地查找项 您没有重复的项 对于小的集合体,或者您不会频繁查找的集合体,建立哈希带来的额外时间和内存的 开销经常会大过改进搜索速度所节省的时间。
大公司规范
【知乎规范】强烈推荐:编码之前碎碎念(工程实践)https://python-web-guide.readthedocs.io/zh/latest/codingstyle/codingstyle.html
【Google规范】Google 开源项目风格指南:https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/
【Python Code Style】https://docs.python-guide.org/writing/style/
【Python最佳实践指南!】https://pythonguidecn.readthedocs.io/zh/latest/
PEP 8列出了许多细节,有几条规则绝对应该遵守:
Python官方有一个PEP8:Style Guide for Python Code。https://www.python.org/dev/peps/pep-0008/ 采用一致的代码风格,有利于项目的多人协作和后续的修改维护工作。Brett Slatkin写的《Effective Python》的第2条列举了一些PEP8中绝对应该遵守的规则。列举其中的一些(语言表述上和内容上我略有修改,是直接从我自己的笔记中复制出来):
空白
命名
表达式和语句