Python 编码风可园中学校园网格指南

明星娱乐
后台-插件-广告管理-内容页头部广告(手机)

本节收录了稍作剪辑的PEP 8摘要 (Python Enhancement Proposal,Python增强提案) 。PEP 8由Guido van Rossum和Barry Warsaw撰写,是Python的最接近编程风格手册的东西。这里省略了一些比较具体的部分,但主要内容都已包括。应该尽可能让代码遵守PEP 8规范,代码会由此更具Python风格。

访问Python官方网站的文档部分并搜索PEP,就可以获得PEP 8全文及Python历史上发布的所有其他PEP。PEP既是Python历史和经验的绝佳来源,也是当前议题和将来计划的解释。

访问Python官方网站的文档部分并搜索PEP,就可以获得PEP 8全文及Python历史上发布的所有其他PEP。PEP既是Python历史和经验的绝佳来源,也是当前议题和将来计划的解释。

01

简介 本文档给出的Python编码约定,适用于由Python主发行版本中的标准库构成的代码。有关Python的C实现中的C代码风格指南,参见相应的PEP。本文档改编自Guido最初的Python风格指南文章,并加入了Barry风格指南的一些内容。如果与Guido的风格规则存在冲突,应该遵从本PEP。本PEP可能尚未完结 (其实可能永远不会完结) 。

01

盲目的一致性是头脑简单的表现 Guido的一个重要观点是,代码被阅读的次数远多于被编写的次数。本指南旨在提高代码的可读性,使各种各样的Python代码能保持风格一致。正如PEP 20所述,“Readability counts” (注重可读性) 。 风格指南是讨论一致性的。与风格指南保持一致很重要。维持同一个项目内部的一致性更加重要。而保证同一个模块和函数内部的一致性则最重要。 然而最最重要的是,知道何时应打破一致性,有时风格指南并不适用。如果心存疑虑,请采用自己的最佳判断。请看看别人的例子并做出最佳决定。不要犹豫,尽管发出疑问。 以下是两个打破规范的好理由。 如果应用风格指南会让代码的可读性变差,甚至对于习惯阅读遵守本规范代码的人来说也是如此。 需要与周边的代码保持一致,而这些代码并未遵守规范 (可能是历史原因造成的) ,尽管这也可能是个收拾别人烂摊子的机会 (真正的极限编程风格) 。

01

代码布局 1.

缩进

每级缩进采用4个空格。 为了对付那些确实陈旧的代码,又不愿做出清理,那么可以继续沿用8个空格长度的制表符。 2.

制表符还是空格

绝对禁止制表符和空格的混用。 最流行的Python缩进方式是只使用空格。第二流行的方式是只使用制表符。混合使用制表符和空格进行缩进的代码,应该转换为只使用空格的方式。如果调用Python命令行解释器时带上 -t 参数,它就会对非法混用制表符和空格的代码发出警告。如果用了 -tt 参数,这些警告就会上升为错误。强烈推荐使用这些参数! 对全新的项目而言,强烈建议只用空格缩进,换掉所有的制表符。大部分编辑器都具备将制表符替换为空格的便捷功能。 3.

最大行长

所有行都应限制在79个字符以内。 将行长限制在80个字符的设备还有很多,而且将窗口限制为80个字符宽就可以并排放置多个窗口。这些设备上的默认换行会破坏代码的外观,增加理解的难度。因此,请将所有行都限制在79个字符以内。对于连续的大段文字 (文档字符串或注释) ,建议将行长限制在72个字符以内。 1 class Rectangle (Blob) : 2 def __init__ (self,width,height, 3 color= 'black' ,emphasis=None,highlight= 0 ) : 4 if (width== 0 and height== 0 and 5 color== 'red' and emphasis== 'strong' or 6 highlight 100 ): 7 raise ValueError( "sorry,youlose" ) 8 if width== 0 and height== 0 and (color== 'red' or 9 emphasis is None ): 10 raise ValueError( "Idon'tthinkso--valuesare%s,%s" % 11 (width,height)) 12 Blob.__init__(self,width,height, 13 color,emphasis,highlight) 4.

空行

顶级函数和类定义之间,请用两个空行分隔。 类内部的各个方法定义之间,请用1个空行分隔。 为了让有关联的函数成组,可以在各函数组之间有节制地添加空行。相互关联的一组单行函数之间,可以省略空行,如一组函数的伪实现 (dummy implementation) 。 函数内部可以有节制地用空行来区分出各个逻辑部分。 Python可将Ctrl+L (^L) 换页符接受为空白符。很多工具都将其视为分页符,所以可以利用其进行分页,使得文件中的关联部分单独成页。 5.

导入

导入语句通常应单独成行,例如: 1 import os 2 import sys

不要像下面这样写在一起: 1 import sys,os

不过下面的写法没有问题: 1 from subprocess import Popen,PIPE

导入语句通常位于文件的顶部,紧挨着模块注释和文档字符串后面,在模块全局变量和常量定义之前。 导入语句应按照以下顺序进行分组。 (1)标准库的导入。 (2)相关第三方库的导入。 (3)本地应用程序/库——特定库的导入。 每组导入语句之间请加入1个空行。 任何对应的 __all__ 声明都应位于导入语句之后。 非常不推荐对内部包的导入使用相对导入语法。请始终对所有导入都使用绝对包路径。即便Python 2.5现在已完全实现了PEP 328,它的显式相对导入语法也是强烈不推荐的。绝对导入的可移植性更好,通常可读性也会更好。 如果是从包含类的模块中导入类,通常可以采用如下写法: 1 from myclass import MyClass 2 from foo.bar.yourclass import YourClass

如果上述写法会导致本地命名冲突,就采用如下写法: 1 import myclass 2 import foo.bar.yourclass

然后用 myclass.MyClass 和 foo.bar.yourclass.YourClass 表示类。 6.

表达式和语句内的空白符

讨厌之事——以下场合应避免使用多余的空白符。 紧靠小括号、中括号或大括号内部。 正确: 1 spam ( ham [1] ,{ eggs : 2 })

错误: 1 spam ( ham [1] ,{ eggs : 2 }) 紧挨着逗号、分号或冒号之前。 正确: 1 if x==4: print x,y;x,y=y,x

错误: 1 if x==4: print x,y;x,y=y,x 紧挨着函数参数列表的左括号之前。 正确: 1 spam(1)

错误: 1 spam ( 1 ) 紧挨着索引或切片操作的左括号之前。 正确: 1 dict[ 'key' ]=list[ index ]

错误: 1 dict [ 'key' ]=list[index]

为了与另一条赋值或其他语句对齐,在运算符两边使用多个空格。 正确: 1 x = 1 2 y = 2 3 long_variable = 3

错误: 1 x = 1 2 y = 2 3 long_variable = 3 7.

其他建议

始终在以下二元操作符两侧各放1个空格:赋值( = )、增量赋值( += , -= 等)、比较( == 、 、 、 != 、 、 = 、 = 、 in 、 not 、 in 、 is 、 is not )、布尔( and 、 or 、 not )。 在数学运算符两侧放置空格。 正确: 1 i=i+1 2 submitted+=1 3   4 x=x*2–1 5 hypot2=x*x+y*y 6 c=(a+b)*(a-b)

错误: 1 i=i+1 2 submitted+=1 3 x=x*2–1 4 hypot2=x*x+y*y 5 c=(a+b)*(a-b) 在用于指定关键字参数或默认参数值时,请勿在 = 两边使用空格。 正确: 1 def complex ( real , imag = 0.0 ): 2 return magic(r= real ,i= imag )

错误: 1 def complex ( real , imag = 0.0 ): 2 return magic(r= real ,i= imag ) 通常不鼓励使用复合语句,也就是在同一行放置多条语句。 正确: 1 if foo== 'blah' : 2 do_blah_thing() 3 do_one() 4 do_two() 5 do_three()

最好不要: 1 if foo== 'blah' :do_blah_thing() 2 do_one();do_two();do_three()

虽然有时候将小块代码和 if/for/while 放在同一行没什么问题,但多行语句绝对不能如此。同时还要避免过长代码行的折叠! 最好不要: 1 if foo== 'blah' :do_blah_thing() 2 for x in lst:total+=x 3 while t10:t=delay()

绝对不要: 1 if foo== 'blah' :do_blah_thing() 2 else :do_non_blah_thing() 3 try :something() 4 finally :cleanup() 5 do_one();do_two();do_three( long ,argument, 6 list,like, this ) 7 if foo== 'blah' :one();two();three()

本文截选自最新上架的《Python 快速入门》第3版 推荐理由: 本书是Python专业人士Naomi Ceder编写的Python语言的综合指南。她是一位经验丰富的教学者,她既能让读者关注语言的细节,又能使其具备解决实际问题的能力。本书中配有大量贴切的示例和边做边学的习题,有助于读者掌握每一个重要概念。无论读者是要抓取网站内容还是想玩转嵌套元组,都会赞叹本书的清晰、专注和对细节的重视。 本书主要内容 明确涵盖Python 3。 全面介绍核心库、包和工具。 配备精深的习题。 新增5章与数据科学相关的内容。 本书专为熟悉编程概念的读者编写,但不要求读者具备Python的使用经验。

后台-插件-广告管理-内容页尾部广告(手机)
标签:

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。