(完整版)Python开发编码规范.docx
《(完整版)Python开发编码规范.docx》由会员分享,可在线阅读,更多相关《(完整版)Python开发编码规范.docx(23页珍藏版)》请在课桌文档上搜索。
1、Python开发编码规范代码的布局31o1缩进31.2 制表符还是空格?31.3 行的最大长度31o4空行4编码51.1 导入51.2 空格61.3 3其它建议(OtherRecommendations)81.4 注释102o4.1注释块112o4.2行内注释112o5文档化121.6 版本注记141.7 命名约定152. 7.1描述:命名风格162o7o2说明:命名约定173. 7.3应避免的名字1827o301模块名(ModuleNames)1827.3.2类名(CIaSSNames)182o703.3异常名(ExceptionNames)192.73o4全局变量名(GlobalVaria
2、bIeNames)192.7o3.5函数名(FUnCtiOnNames)192.7.36方法名和实例变量(MethodNamesandInstanceVariables)192o703.7继承的设计(DeSigningforinheritance)20设计建议(ProgrammingRecommendations)211代码的布局1.1 缩进使用Emacs的Python-mode的默认值:4个空格一个缩进层次。对于确实古老的代码,你不希望产生混乱,可以继续使用8空格的制表符(8-spacetabs)oEmacsPython-mode自动发现文件中主要的缩进层次,依此设定缩进参数.1.2 制表符
3、还是空格?永远不要混用制表符和空格。最流行的Python缩进方式是仅使用空格,其次是仅使用制表符。混合着制表符和空格缩进的代码将被转换成仅使用空格。(在Emacs中,选中整个缓冲区,按ESC-X去除制表符(Untabify)。)调用PythOn命令行解释器时使用一t选项,可对代码中不合法得混合制表符和空格发出警告(warnings)o使用-tt时警告(WarningS)将变成错误(errors).这些选项是被高度推荐的。对于新的项目,强烈推荐仅使用空格(spaces-only)而不是制表符.许多编辑器拥有使之易于实现的功能。(在EmaCS中,确认indent-tabs-mode是niI)。1.
4、3 行的最大长度周围仍然有许多设备被限制在每行80字符;而且,窗口限制在80个字符使将多个窗口并排放置成为可能。在这些设备上使用默认的折叠(WraPPing)方式看起来有点丑陋.因此,请将所有行限制在最大79字符(ErTlaCS准确得将行限制为长80字符),对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在72字符。折叠长行的首选方法是使用Pyhon支持的圆括号,方括号(brackets)和花括号(braces)内的行延续。如果需要,你可以在表达式周围增加一对额外的圆括号,但是有时使用反斜杠看起来更好.确认恰当得缩进了延续的行。Emacs的Python-mode正确得完成了这些.一些例
5、子:ToggleIinenumberscIassRectangle(Blob):23 def_init_(seIf,width,height,4coIor=fbIack,emphasis=None,highIight-0):5 ifwidth=0andheight=0and8Or=redandephasis=,strongorhighIight100:6 raiseVaIueError,“sorry,youlose7 ifwidth=0andheight=0and(coIor=red,or8emphasisisNone):9 raiseVaIueError,Idontthinkso”10 Bl
6、obo_init_(seIf,width,height,11 color,emphasis,highIight)1.4空行用两行空行分割顶层函数和类的定义,类内方法的定义用单个空行分割。额外的空行可被用于(保守的(SParingly)分割相关函数组成的群(grouPSOfrelatedfUnCtiOnS)O在一组相关的单句中间可以省略空行。(例如.一组哑元(asetofdummyimpIementations)o当空行用于分割方法(method)的定义时,在class,行和第一个方法定义之间也要有一个空行。在函数中使用空行时,请谨慎的用于表示一个逻辑段落(indicatelogicalsect
7、ions).Python接受conto-L(即CL)换页符作为空格;Emacs(和一些打印工具)视这个字符为页面分割符,因此在你的文件中,可以用他们来为相关片段(SeCtiOnS)分页。2编码PythOn核心发布中的代码必须始终使用ASCIl或LatinT编码(又名ISO-8859-1)o使用ASCII的文件不必有译码COOkie(COdingcookie).Latin-1仅当注释或文档字符串涉及作者名字需要Latin1时才被使用;另外使用x转义字符是在字符串中包含非ASCII(non-ASCII)数据的首选方法。作为PEP263实现代码的测试套件的部分文件是个例外.Python2.4以后内核
8、支持Unicode了!不论什么情况使用UTF-8吧!2.1导入通常应该在单独的行中导入(ImPOrts),例如:No:importsys,osYes:importsysimportos但是这样也是可以的:fromtypesimportStringType,LiStTypeImports通常被放置在文件的顶部,仅在模块注释和文档字符串之后,在模块的全局变量和常量之前.Imports应该有顺序地成组安放。1 o标准库的导入(I叩OrtS)2 .相关的主包(majorPaCkage)的导入(即,所有的emaiI包在随后导入)3 .特定应用的导入(imports)你应该在每组导入之间放置一个空行。对于
9、内部包的导入是不推荐使用相对导入的。对所有导入都要使用包的绝对路径.从一个包含类的模块中导入类时,通常可以写成这样:fromMyCIassimportMyCIassfromfoo.baroYourCIassimportYourCIass如果这样写导致了本地名字冲突,那么就这样写importMyCIassimportfoo.baroYourCIass*即使用MyCIass.MyCIass和fooobar.YourCIass.YourCIass2.2空格(WhitespaceinExpressionsandStatements)*GUidO不喜欢在以下地方出现空格:“spam(ham1,eggs:
10、2)oAlwayswritethisas“spam(ham1,eggs:2),o紧挨着圆括号,方括号和花括号的,如:,spam(ham1,eggs:if x = 4 :要始终将它写成spam(ham1,eggs:2),oprintx,y;x,y=y,xoAlwayswritethisas”ifx=4:print x, y; x, y = y, xo紧贴在逗号,分号或冒号前的,如:if X = 4:print x , y ; x , y = y , xo 要始终将它写成if x = 4:pr i nt,y; , y - y,紧贴着函数调用的参数列表前开式括号(openparenthesis)的,
11、如“ spam(1)”.要始终将它写成“SPam(I) ”。siicing,asin:diet,key,=Iistindex,.Alwayswritethisasdiet key,=Iistindex,o紧贴在索引或切片(SliCing?下标?)开始的开式括号前的,如:Toggle123Toggle1232.3,dietkey,=Iistindex,o要始终将它写成“diet,key,二Iistindex,.o在赋值(或其它)运算符周围的用于和其它并排的一个以上的空格,如:Iinenumbersx二1V-2Iong_variabIe=3*要始终将它写成Iinenumbersx二1y-2long
12、_variabIe=3*(不要对以上任意一条和他争论Guido养成这样的风格超过20年了。)其它建议(OtherRecommendations)始终在这些二元运算符两边放置一个空格:赋值(二),比较仁二,,!二,,not).=,in,notin,is,isnot),布尔运算(and,or*按你的看法在算术运算符周围插入空格。始终保持二元运算符两边空格的一致。ToggleIinenumbers1i=i+12submitted=submitted+13x=x*2-14hypot2=x*x+y*y5c=(a+b)*(a-b)6c-(a+b)*(a-b)*不要在用于指定关键字参数或默认参数值的二号周围
13、使用空格,例如:ToggleIinenumbersdefcompIex(reaI,imag=0o0):2i=imag)returnmagic(r=reaI,*不要将多条语句写在同一行上。No:iffoo=blah:do_bIah_thing()Yes:iffoo=blah,:do_bIah_thingONo:do_oneO;do_two();do_threeOYes:do_one()do_twoOdo_three()2.4注释(Comments)*同代码不一致的注释比没注释更差。当代码修改时,始终优先更新注释!注释应该是完整的句子。如果注释是一个短语或句子,首字母应该大写,除非他是一个以小写字
14、母开头的标识符(永远不要修改标识符的大小写).如果注释很短,最好省略末尾的句号(period?结尾句末的停顿?也可以是逗号吧,)注释块通常由一个或多个由完整句子构成的段落组成,每个句子应该以句号结尾。你应该在句末,句号后使用两个空格,以便使EmaCS的断行和填充工作协调一致(译按:应该说是使这两种功能正常工作给出了文档结构的提示)。用英语书写时,断词和空格是可用的。非英语国家的PythOn程序员:请用英语书写你的注释,除非你120%的确信这些代码不会被不懂你的语言的人阅读。我就是坚持全部使用中文来注释,真正要发布脚本工具时,再想E文的;开发时每一瞬间都要用在思量中,坚决不用在E文语法,单词的回
15、忆中!ZoomQUiet约定使用统一的文档化注释格式有利于良好习惯和团队建议!一CodeCommentingRuIe2.4.1注释块(BlockComments)*注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次。注释块中每行以#和一个空格开始(除非他是注释内的缩进文本).注释块内的段落以仅含单个#的行分割。注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段的注释)。2.4.2行内注释(lnlineComments)*(inline?内联?翻成“行内”比较好吧)0一个行内注释是和语句在同一行的注释。行内注释应该谨慎适用.行内注释应该至少用两个空格和语句
16、分开。它们应该以#和单个空格开始.x = x+1#IncrementX*如果语意是很明了的,那么行内注释是不必要的,事实上是应该被去掉的。不要这样写:x+1IncrementXx+1Compensateforborder*但是有时,这样是有益的:x+1Compensateforborder2.5文档化(DocumentationStrings)*Conventionsforwritinggooddocumentationstrings(aok0a.docstrings)areimmortaIizedinPEP257o应该一直遵守编写好的文档字符串(又名docstrings)的约定(?实在不知道
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 Python 开发 编码 规范
链接地址:https://www.desk33.com/p-962315.html