-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【规范】Python编程规范 #13
Comments
比如处理excel报表等直接用pandas提供的函数非常方便,我经常看见还是有人自己写一堆恶心的处理函数而不用pandas。如果自己造轮子确保测试和文档,否则后续维护和上手会有很大成本。 |
用sentry等工具记录异常,有利于排查问题(能保存堆栈和现场信息)。切记不要轻易吞掉非预知异常,一旦出现问题不好排查,笔者之前维护的项目曾踩过坑,后来笔者引入了sentry排查问题方便很多。 |
如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.
继承自 object 是为了使属性(properties)正常工作, 并且这样可以保护你的代码, 使其不受 PEP-3000 的一个特殊的潜在不兼容性影响. 这样做也定义了一些特殊的方法, 这些方法实现了对象的默认语义, 包括 new, init, delattr, getattribute, setattr, hash, repr, and str .
|
每个导入应该独占一行
|
Main即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中. 在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if name == 'main' , 这样当模块被导入时主程序就不会被执行.
|
【命名规范】不知道怎么起名字,查询这个 |
【在列表/集合/字典中查找一个项】 用如下代码举个例子:
即使两个函数看起来完全一样,但因为 查找集合 是利用了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中绝对应该遵守的规则。列举其中的一些(语言表述上和内容上我略有修改,是直接从我自己的笔记中复制出来):
空白
命名
表达式和语句
The text was updated successfully, but these errors were encountered: