Python-编码规范汇编

上传人:jiups****uk12 文档编号:40173729 上传时间:2018-05-24 格式:DOCX 页数:7 大小:29.55KB
返回 下载 相关 举报
Python-编码规范汇编_第1页
第1页 / 共7页
Python-编码规范汇编_第2页
第2页 / 共7页
Python-编码规范汇编_第3页
第3页 / 共7页
Python-编码规范汇编_第4页
第4页 / 共7页
Python-编码规范汇编_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《Python-编码规范汇编》由会员分享,可在线阅读,更多相关《Python-编码规范汇编(7页珍藏版)》请在金锄头文库上搜索。

1、 1 / 7Python 编码规范遵循良好的编码风格,可以有效的提高代码的可读性,降低出错几率和维护难度。在团队开发中,使用(尽量)统一的编码风格,还可以降低沟通成本。网上有很多版本的编码规范,基本上都是遵循 PEP8 的规范:PEP 0008 Style Guide for Python CodeGoogle 的 Python 风格指南Python Guide - Code StylePocoo Styleguide除了在编码时主动遵循规范,还有很多有用的工具:IntelliJ IDEA 和 PyCharm 的格式化代码功能Google 开源的 Python 文件格式化工具: pylint

2、等工具及各种编辑器的插件本文的内容主要摘自互联网上各种版本的规范,因为公司有些小伙伴代码风格不太好,所以整理了一份算是团队的编码规范。缩进不要使用 tab 缩进使用任何编辑器写 Python,请把一个 tab 展开为 4 个空格绝对不要混用 tab 和空格,否则容易出现 IndentationError空格在 list, dict, tuple, set, 参数列表的 , 后面加一个空格在 dict 的 : 后面加一个空格在注释符号 # 后面加一个空格,但是 #!/usr/bin/python 的 # 后不能有空格操作符两端加一个空格,如 +, -, *, /, |, 隔开if/for/whi

3、le 语句中,即使执行语句只有一句,也要另起一行换行每一行代码控制在 80 字符以内使用 或 () 控制换行,举例:defdef foofoo(first, second, third, fourth, fifth, sixth, and_some_other_very_long_param): user = User.objects.filter_by(first=first, second=second, third=third) .skip(100).limit(100) .all()text = (Long strings can be made up of several short

4、er strings.) 命名使用有意义的,英文单词或词组,绝对不要使用汉语拼音package/module 名中不要出现 -各种类型的命名规范:TypeTypePublicPublicInternalInternalModuleslower_with_under_lower_with_underPackageslower_with_underClassesCapWords_CapWordsExceptionsCapWordsFunctionslower_with_under() _lower_with_under()Global/Class ConstantsCAPS_WITH_UNDER_

5、CAPS_WITH_UNDERGlobal/Class Variableslower_with_under_lower_with_underInstance Variableslower_with_under_lower_with_under (protected) or _lower_with_under (private)3 / 7TypeTypePublicPublicInternalInternalMethod Nameslower_with_under()_lower_with_under() (protected) or _lower_with_under() (private)F

6、unction/Method Parameterslower_with_underLocal Variableslower_with_underimport所有 import 尽量放在文件开头,在 docstring 下面,其他变量定义的上面不要使用 from foo imort *import 需要分组,每组之间一个空行,每个分组内的顺序尽量采用字典序,分组顺序是:1. 标准库2. 第三方库3. 本项目的 package 和 module不要使用隐式的相对导入(implicit relative imports),可是使用显示的相对导入(explicit relative imports),

7、如 from .utils import validator,最好使用全路径导入(absolute imports)对于不同的 package,一个 import 单独一行,同一个 package/module 下的内容可以写一起:# badimportimport sys, os, time# goodimportimport osimportimport sysimportimport time# okfromfrom flask importimport Flask, render_template, jsonify为了避免可能出现的命名冲突,可以使用 as 或导入上一级命名空间不要出现

8、循环导入(cyclic import)4 / 7注释文档字符串 docstring, 是 package, module, class, method, function 级别的注释,可以通过 _doc_ 成员访问到,注释内容在一对 “ 符号之间function, method 的文档字符串应当描述其功能、输入参数、返回值,如果有复杂的算法和实现,也需要写清楚不要写错误的注释,不要无谓的注释# bad 无谓的注释x = x + 1 # increase x by 1# bad 错误的注释x = x - 1 # increase x by 1优先使用英文写注释,英文不好全部写中文,否则更加看不懂

9、异常不要轻易使用 try/exceptexcept 后面需要指定捕捉的异常,裸露的 except 会捕捉所有异常,意味着会隐藏潜在的问题可以有多个 except 语句,捕捉多种异常,分别做异常处理使用 finally 子句来处理一些收尾操作try/except 里的内容不要太多,只在可能抛出异常的地方使用,如:# badtrytry: user = User() user.name = “leon“ user.age = int(age) # 可能抛出异常 user.created_at = datetime.datetime.utcnow() db.session.add(user) mit

10、() # 可能抛出异常exceptexcept: db.session.rollback()# better5 / 7trytry: age = int(age)exceptexcept (TypeError, ValueError): returnreturn # 或别的操作user = User()user.name = “leon“user.age = ageuser.created_at = datetime.datetime.utcnow()db.session.add(user)trytry: mit()exceptexcept sqlalchemy.exc.SQLAlchemyE

11、rror: # 或者更具体的异常 db.session.rollback()finallyfinally: db.session.close()从 Exception 而不是 BaseException 继承自定义的异常类Class(类)显示的写明父类,如果不是继承自别的类,就继承自 object 类使用 super 调用父类的方法支持多继承,即同时有多个父类,建议使用 Mixin编码建议字符串使用字符串的 join 方法拼接字符串使用字符串类型的方法,而不是 string 模块的方法使用 startswith 和 endswith 方法比较前缀和后缀使用 format 方法格式化字符串比较空

12、的 list, str, tuple, set, dict 和 0, 0.0, None 都是 False使用 if some_list 而不是 if len(some_list) 判断某个 list 是否为空,其他类型同理6 / 7使用 is 和 is not 与单例(如 None)进行比较,而不是用 = 和 !=使用 if a is not None 而不是 if not a is None用 isinstance 而不是 type 判断类型不要用 = 和 != 与 True 和 False 比较(除非有特殊情况,如在 sqlalchemy 中可能用到)使用 in 操作:1. 用 key

13、in dict 而不是 dict.has_key()2.# bad3. ifif d.has_key(k):4. do_something()5.6.# good7. ifif k inin d:8. do_something()9. 用 set 加速 “存在性” 检查,list 的查找是线性的,复杂度 O(n),set 底层是 hash table, 复杂度 O(1),但用 set 需要比 list 更多内存空间其他使用列表表达式(list comprehension),字典表达式(dict comprehension, Python 2.7+) 和生成器(generator)dict 的

14、get 方法可以指定默认值,但有些时候应该用 操作,使得可以抛出 KeyError使用 for item in list 迭代 list, for index, item in enumerate(list) 迭代 list 并获取下标使用内建函数 sorted 和 list.sort 进行排序适量使用 map, reduce, filter 和 lambda,使用内建的 all, any 处理多个条件的判断使用 defaultdict (Python 2.5+), Counter(Python 2.7+) 等 “冷门” 但好用的标准库算法和数据结构7 / 7使用装饰器(decorator)使用 with 语句处理上下文有些时候不要对类型做太过严格的限制,利用 Python 的鸭子类型(Duck Type)特性使用 logging 记录日志,配置好格式和级别了解 Python 的 Magic Method:A Guide to Pythons Magic Methods, Python 魔术方法指南阅读优秀的开源代码,如 Flask 框架, Requests for Humans不要重复造轮子,查看标准库、PyPi、Github、Google 等使用现有的优秀的解决方案

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号