Python-编码规范汇编

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1/7Python编码规范遵循良好的编码风格,可以有效的提高代码的可读性,降低出错几率和维护难度。在团队开发中,使用(尽量)统一的编码风格,还可以降低沟通成本。网上有很多版本的编码规范,基本上都是遵循PEP8的规范:PEP0008–StyleGuideforPythonCodeGoogle的Python风格指南PythonGuide-CodeStylePocooStyleguide除了在编码时主动遵循规范,还有很多有用的工具:IntelliJIDEA和PyCharm的格式化代码功能Google开源的Python文件格式化工具:github.com/google/yapfpyflakes,pylint等工具及各种编辑器的插件本文的内容主要摘自互联网上各种版本的规范,因为公司有些小伙伴代码风格不太好,所以整理了一份算是团队的编码规范。缩进不要使用tab缩进使用任何编辑器写Python,请把一个tab展开为4个空格绝对不要混用tab和空格,否则容易出现IndentationError空格在list,dict,tuple,set,参数列表的,后面加一个空格在dict的:后面加一个空格在注释符号#后面加一个空格,但是#!/usr/bin/python的#后不能有空格操作符两端加一个空格,如+,-,*,/,|,&,=接上一条,在参数列表里的=两端不需要空格2/7括号((),{},[])内的两端不需要空格空行function和class顶上两个空行class的method之间一个空行函数内逻辑无关的段落之间空一行,不要过度使用空行不要把多个语句写在一行,然后用;隔开if/for/while语句中,即使执行语句只有一句,也要另起一行换行每一行代码控制在80字符以内使用\或()控制换行,举例:deffoo(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=('Longstringscanbemadeup''ofseveralshorterstrings.')命名使用有意义的,英文单词或词组,绝对不要使用汉语拼音package/module名中不要出现-各种类型的命名规范:TypePublicInternalModuleslower_with_under_lower_with_underPackageslower_with_underClassesCapWords_CapWordsExceptionsCapWordsFunctionslower_with_under()_lower_with_under()Global/ClassConstantsCAPS_WITH_UNDER_CAPS_WITH_UNDERGlobal/ClassVariableslower_with_under_lower_with_underInstanceVariableslower_with_under_lower_with_under(protected)or__lower_with_under(private)3/7TypePublicInternalMethodNameslower_with_under()_lower_with_under()(protected)or__lower_with_under()(private)Function/MethodParameterslower_with_underLocalVariableslower_with_underimport所有import尽量放在文件开头,在docstring下面,其他变量定义的上面不要使用fromfooimort*import需要分组,每组之间一个空行,每个分组内的顺序尽量采用字典序,分组顺序是:1.标准库2.第三方库3.本项目的package和module不要使用隐式的相对导入(implicitrelativeimports),可是使用显示的相对导入(explicitrelativeimports),如from..utilsimportvalidator,最好使用全路径导入(absoluteimports)对于不同的package,一个import单独一行,同一个package/module下的内容可以写一起:#badimportsys,os,time#goodimportosimportsysimporttime#okfromflaskimportFlask,render_template,jsonify为了避免可能出现的命名冲突,可以使用as或导入上一级命名空间不要出现循环导入(cyclicimport)注释4/7文档字符串docstring,是package,module,class,method,function级别的注释,可以通过__doc__成员访问到,注释内容在一对符号之间function,method的文档字符串应当描述其功能、输入参数、返回值,如果有复杂的算法和实现,也需要写清楚不要写错误的注释,不要无谓的注释#bad无谓的注释x=x+1#increasexby1#bad错误的注释x=x-1#increasexby1优先使用英文写注释,英文不好全部写中文,否则更加看不懂异常不要轻易使用try/exceptexcept后面需要指定捕捉的异常,裸露的except会捕捉所有异常,意味着会隐藏潜在的问题可以有多个except语句,捕捉多种异常,分别做异常处理使用finally子句来处理一些收尾操作try/except里的内容不要太多,只在可能抛出异常的地方使用,如:#badtry:user=User()user.name=leonuser.age=int(age)#可能抛出异常user.created_at=datetime.datetime.utcnow()db.session.add(user)db.session.commit()#可能抛出异常except:db.session.rollback()#bettertry:age=int(age)5/7except(TypeError,ValueError):return#或别的操作user=User()user.name=leonuser.age=ageuser.created_at=datetime.datetime.utcnow()db.session.add(user)try:db.session.commit()exceptsqlalchemy.exc.SQLAlchemyError:#或者更具体的异常db.session.rollback()finally:db.session.close()从Exception而不是BaseException继承自定义的异常类Class(类)显示的写明父类,如果不是继承自别的类,就继承自object类使用super调用父类的方法支持多继承,即同时有多个父类,建议使用Mixin编码建议字符串使用字符串的join方法拼接字符串使用字符串类型的方法,而不是string模块的方法使用startswith和endswith方法比较前缀和后缀使用format方法格式化字符串比较空的list,str,tuple,set,dict和0,0.0,None都是False使用ifsome_list而不是iflen(some_list)判断某个list是否为空,其他类型同理使用is和isnot与单例(如None)进行比较,而不是用==和!=6/7使用ifaisnotNone而不是ifnotaisNone用isinstance而不是type判断类型不要用==和!=与True和False比较(除非有特殊情况,如在sqlalchemy中可能用到)使用in操作:1.用keyindict而不是dict.has_key()2.#bad3.ifd.has_key(k):4.do_something()5.6.#good7.ifkind:8.do_something()9.用set加速“存在性”检查,list的查找是线性的,复杂度O(n),set底层是hashtable,复杂度O(1),但用set需要比list更多内存空间其他使用列表表达式(listcomprehension),字典表达式(dictcomprehension,Python2.7+)和生成器(generator)dict的get方法可以指定默认值,但有些时候应该用[]操作,使得可以抛出KeyError使用foriteminlist迭代list,forindex,iteminenumerate(list)迭代list并获取下标使用内建函数sorted和list.sort进行排序适量使用map,reduce,filter和lambda,使用内建的all,any处理多个条件的判断使用defaultdict(Python2.5+),Counter(Python2.7+)等“冷门”但好用的标准库算法和数据结构使用装饰器(decorator)7/7使用with语句处理上下文有些时候不要对类型做太过严格的限制,利用Python的鸭子类型(DuckType)特性使用logging记录日志,配置好格式和级别了解Python的MagicMethod:AGuidetoPython’sMagicMethods,Python魔术方法指南阅读优秀的开源代码,如Flask框架,RequestsforHumans不要重复造轮子,查看标准库、PyPi、Github、Google等使用现有的优秀的解决方案

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功