pep8 python 编码方式,python pe8规范
1.分号:
——不要在行尾加记号,也不要用分号把两个命令放在同一行。2.线路长度:
每行不超过80个字符(长的导入模块语句和注释中的URL除外)。不要使用反斜杠连接各行。Python隐式连接圆括号、中括号和大括号中的行:-推荐:foo _ bar (self,width,height,color= black ,design=none,x= foo ,
Emphasis=None,highlight=0)如果一个文本字符串放不下一行,可以用括号实现隐式行连接:x=(这是一个很长,很长,很长
很长,很长,很长,很长的字符串),如果有必要,把长网址放在一行。是:#详情请见
# http://www . example . com/us/developer/documentation/API/content/v 2.0/CSV _ file _ name _ extension _ full _ specification . html 3 .括号:
最好使用括号。除非用于连接行,否则不要在return语句或条件语句中使用括号。但是,可以在元组的两边使用括号。
是:如果foo:
酒吧()
而x:
x=bar()
如果x和y:
酒吧()
如果不是x:
酒吧()
返回foo
对于dict.items()中的(x,y):
否:如果(x):
酒吧()
如果不是(x):
酒吧()
返回(foo)4。缩进
用4个空格缩进代码,不要使用tab,不要混用tab和空格。对于行连接的情况,您应该垂直对齐新行的元素(参见:ref:line length line _ length部分的示例),或者使用4个空格的悬挂缩进(当第一行不应该有参数时):
是:#与起始变量对齐。
foo=long_function_name(var_one,var_two,
var_three,var_four)
#与字典中的起始值对齐
foo={
long_dictionary_key:值1
价值2,
.
}
# 4空格缩进,不需要第一行
foo=长函数名(
var_one,var_two,var_three,
var_four)
# 4字典中的空格是缩进的
foo={
长字典关键字:
长字典值,
.
}5.空白行:
顶级定义之间有两行空行,方法定义之间有一行空行,顶级定义之间有两行空行,比如函数或类定义。在方法定义、类定义和第一个方法之间应该有一个空行。在函数或方法中,如果你认为合适,留一个空行。
6.空间:
标点符号两边的空格按标准排版使用,括号里没有空格,标点符号两边的空格按标准排版使用。是:垃圾邮件(火腿[1],{鸡蛋:2},[])
否:spam( ham[ 1 ],{eggs: 2 },[])逗号、分号、冒号前不要加空格,应该加在后面(行尾除外)。是:如果x==4:
打印x,y
x,y=y,x
否:如果x==4:
打印x,y
x,y=y,x参数列表、索引或切片前面不应有空格。是:垃圾邮件(1)
否:垃圾邮件(1)
是:dict[key]=list[index]
No: dict [key]=list [index]在二元运算符两边加一个空格,比如赋值(=)和比较(==,=,=,=,=,in,not in,is,is not),Boolean (and,or,not)。至于算术运算符两边的空格怎么用,需要自己判断。但是,双方必须保持一致。是:x==1
No: x 1当=用来表示关键字参数或默认参数值时,两边不要用空格。是:def复数(real,imag=0.0):返回魔法(r=real,i=imag)
No: DEF COMPLEX (real,IMAG=0.0): RETURN MAGIC (r=real,I=IMAG)不要使用空格来垂直对齐多行之间的标记,因为这样会成为维护的负担(for:#=等。):是:foo=1000 #评论
Long_name=2 #注释不需要对齐。
字典={
foo: 1,
long_name: 2,
}
No: foo=1000 #评论
Long_name=2 #注释不需要对齐。
字典={
foo : 1,
long_name: 2,
}7.注意事项:
文档字符串:
Python有一个独特的注释方法:使用文档字符串。文档是包、模块、类或函数中的第一条语句。这些字符串可以由对象的__doc__成员自动提取,并由pydoc使用。
文档字符串的约定是使用三重双引号 。功能和方法:
每一部分都应该以标题行开始。标题行以冒号结尾。除标题行外,该部分的其他内容应缩进2个空格。
列出每个参数的名字,并在名字后使用一个冒号和一个空格,分隔对该参数的描述。如果描述太长超过了单行80字符,使用2或者四个空格的悬挂缩进(与文件其他部分保持一致).描述应该包括所需的类型和含义。如果一个函数接受foo(可变长度参数列表)或者* *酒吧(任意关键字参数), 应该详细列出富(中国姓氏)和* *酒吧。
退货: (或者产量:用于生成器)
描述返回值的类型和语义。如果函数返回没有,这一部分可以省略。
加薪:
列出与接口有关的所有异常def fetch _ bigtable _ rows(big _ table,keys,other_silly_variable=None):
""从大表格中提取行。
从表实例中检索与给定键相关的行
以大_表为代表。愚蠢的事情可能会发生,如果
其他_愚蠢_变量不是没有.
参数:
大_表:一个开放的大表格表实例。
按键:表示每个表行的键的字符串序列
去取。
其他_愚蠢_变量:另一个可选变量,它有很多
比其他参数更长的名称,并且没有任何作用。
退货:
一个词典映射键到相应的表行数据
拿来了。每一行都表示为一组字符串。为
示例:
{Serak :(参宿七,编制人),
Zim: (Irk , Invader ),
Lrrr :(奥米克龙珀尔塞8 ,皇帝)}
如果字典中缺少键参数中的一个键,
则在表中找不到该行。
加薪:
IOError:访问技术时出错。表格对象。
及格类:
类应该在其定义下有一个用于描述该类的文档字符串。如果你的类有公共属性(属性),那么文档中应该有一个属性(属性)段。并且应该遵守和函数参数相同的格式。类样本类(对象):
这里是课程总结。
更长的类别信息.
更长的类别信息.
属性:
喜欢_垃圾邮件:一个布尔值,表示我们是否喜欢垃圾邮件。
鸡蛋:我们已经产下的鸡蛋的整数计数。
def __init__(self,likes_spam=False):
用废话初始化样本类
self.likes_spam=likes_spam
self.eggs=0
定义public_method(自我):
执行操作胡说八道块注释和行注释:
最需要写注释的是代码中那些技巧性的部分。如果你在下次代码审查的时候必须解释一下,那么你应该现在就给它写注释。对于复杂的操作,应该在其操作开始前写上若干行注释。对于不是一目了然的代码,应在其行尾添加注释。为了提高可读性,注释应该至少离开代码2个空格。#我们使用加权字典搜索来找出我所在的位置
#数组。我们根据最大数量推断位置
#输入数组和数组大小,然后做二分搜索法来
#得到准确的数字。
如果i (i-1)==0: # true当且仅当我是28的幂,类:
如果一个类不继承自其它类,就显式的从目标继承。嵌套类也一样。
是:类样本类(对象):
及格
类外部类(对象):
类内部类(对象):
及格
类子类(父类):
""已显式继承自另一个类继承自目标是为了使属性(属性)正常工作,并且这样可以保护你的代码,使其不受Python 3000的一个特殊的潜在不兼容性影响。这样做也定义了一些特殊的方法(魔法方法), 这些方法实现了对象的默认语义,包括new、init、delattr、getattribute、setattr、hash、repr和str .
9、字符串:
是:x=a b
x=%s,%s!%(命令式,咒骂式)
x={},{}!。格式(命令式、咒骂式)
x= name:% s;分数:% d“%(名称,n)
x= name:{ };分数:{} 。格式(名称,n)
否:x=%s%s % (a,b) #在这种情况下使用
x={}{} .格式(a,b) #在这种情况下使用
x=命令式,咒骂式!
x= name: name ;Score: str(n)避免在循环中用and=运算符连接字符串。由于字符串是不可变的,这样做将创建不必要的临时对象,并导致二次运行而不是线性运行。或者,您可以将每个子字符串添加到列表中,然后用 连接列表。循环结束后join(列表对象,连接符号)。(您也可以将每个子字符串写入一个
是:items=[ table ]
对于雇员列表中的姓氏、名字:
items.append( tr td %s,%s /td /tr %(姓氏,名字))
items.append( /table )
employee_table=“”。加入(项目)
否:employee_table= table
对于雇员列表中的姓氏、名字:
employee_table= tr td %s,%s /td /tr %(姓氏,名字)
Employee_table= /table 在同一个文件中,使用字符串引号保持一致性。使用单引号或双引号来引用字符串,并在同一个文件中使用它。您可以在字符串中使用另一个引号,以避免在字符串中使用它。皮林特已经加入了这项检查。
是:
python(‘你为什么藏着眼睛?’)
咕鲁(“我害怕线头错误。”)
旁白(‘好!一位快乐的Python评论者认为。)
否:
python(‘你为什么藏着眼睛?’)
咕鲁(‘线头。它燃烧。它会灼伤我们。)
咕鲁(‘永远是伟大的绒布。看着。“看着。”)使用三个双引号,而不是三个单引号。当且仅当单引号用于引用项目中的字符串时,才有可能使用三重双引号作为非文档字符串的多行字符串来标识引用。文档字符串必须使用三个双引号" ".
是:
print(这个好看多了。\n
这样做。\n )
否:
打印 这很难看。
不要这样。
10、文件和套接字
在文件和套接字的末尾,您需要显式地关闭它。
除了文件,套接字或其他类似文件的对象被不必要地打开,这将产生许多副作用,例如:
它们可能会消耗有限的系统资源,例如文件描述符。如果这些资源在使用后没有及时归还给系统,那么用来处理这些对象的代码就会消耗掉所有的资源。
保留文件将阻止其他操作,如移动或删除文件。
只有当文件和套接字在逻辑上关闭时,它们仍然可能被它们的共享程序无意地读取或写入。只有当它们实际上被关闭时,试图读取或写入它们才会耗尽异常,并使问题迅速出现。
而且,想象当文件对象被析构后,文件和套接字会自动关闭,试图将文件对象的生命周期和文件的状态绑定在一起,也是不现实的。因为以下原因:
没有办法确保运行时环境会真正销毁文件。不同的Python实现采用不同的内存管理技术,比如延迟垃圾处理机制。延迟的垃圾处理机制可能导致对象生命周期的无限延长。
对文件的意外引用将导致文件被保留的时间比预期的长(例如,跟踪异常,包括全局变量等。).
建议使用“with”语句来管理文件:
用open(hello.txt )作为hello_file:
对于hello_file中的行:
打印行
对于不支持“with”语句的类似文件的对象,使用contextlib.closing():
导入上下文库
以context lib . closing(urllib . urlopen( http://www . python . org/))为front_page:
对于front_page中的行:
打印第11行,待办事项:
对临时代码使用TODO注释是一种短期解决方案。不完美,但足够好了。
TODO注释应该在all的开头包含“TODO”字符串,后跟您的姓名、电子邮件地址或其他用括号括起来的标识符。然后是可选的冒号。然后必须有一行注释解释该做什么。主要目的是有一个统一的TODO格式,以便添加评论的人可以搜索到它(并根据需要提供更多的细节)。编写TODO注释并不能保证编写注释的人会自己解决问题。当.的时候
# TODO(kl@gmail.com):此处使用 * 表示字符串重复。
# TODO (ZEKE)将此更改为使用关系。如果您的待办事项是“在未来做某事”,那么请确保您包含一个指定的日期(“在2009年11月解决”)或一个特定的事件(“当所有客户都可以处理XML请求时,删除这些代码”)。
12.导入格式:
每个进口应该有一个专属行。
是:导入操作系统
导入系统
否:导入os,sys导入应该总是放在文件的顶部,模块注释和文档字符串之后,模块全局变量和常量之前。进口应按从最常见到最不常见的顺序分组:
标准库导入
第三方库的导入
特定应用程序导入
每个包应该根据每个模块的完整包路径按字典顺序排序,忽略大小写。
导入食物
从foo导入栏
从foo.bar导入baz
从foo.bar导入Quux
从Foob进口ar13,声明:
通常,每条语句都应该有一个专用行。但是,如果测试结果和测试语句在同一行,您也可以将它们放在同一行。
如果是If语句,只有在没有else的情况下才能这样做。特别是,千万不要这样做try/except,因为try和except不能放在同一行。
是:
if foo: bar(foo)
否:
if foo: bar(foo)
else: baz(foo)
尝试:酒吧(foo)
除值错误:baz(foo)
尝试:
酒吧
除值错误:baz(foo)13,访问控制:
在Python中,对于琐碎、不重要的访问函数,应该直接用公共变量替换,这样可以避免额外的函数调用开销。添加更多函数时,可以使用属性来保持语法一致。
(译者注:重视封装的面向对象程序员看到这里可能会反感,因为他们受过教育:所有成员变量都必须是私有的!其实那真的有点麻烦。试着接受毕氏哲学)
另一方面,如果访问更复杂,或者变量的访问开销很大,那么应该使用get_foo()和set_foo()之类的函数调用。如果前面的代码行为允许通过属性进行访问,则不要将新的访问函数绑定到属性。这样,任何试图通过老方法访问变量的代码都无法运行,用户会意识到复杂度变了。
14.命名:
模块名,包名,类名,方法名,异常名,函数名,全局变量名,实例名,函数参数名,局部变量名。
应该避免的名称:
单字符名称,计数器和迭代器除外。
包/模块名称中的连字符(-)
开头和结尾带有双下划线的名称(Python保留,例如__init__)命名约定:所谓的‘Internal’是指它只在模块内可用,或者它在类内是受保护的或私有的。
以单个下划线(_)开始,表示模块变量或函数受保护(使用import * from时不会包括它)。
以双下划线(_ _)开头的实例变量或方法表示在类中是私有的。
将相关的类和顶级函数放在同一个模块中。与Java不同,没有必要将一个类限制在一个模块中。
使用以大写字母开头的单词(比如CapWords,Pascal style)作为类名,但是模块名要用小写下划线(比如lower_with_under.py)。虽然现有的很多模块都有类似CapWords.py这样的命名,但是现在不提倡这样,因为如果模块名恰好和类名一致的话会很麻烦。
Python之父Guido推荐的规范:
15、主要:
即使是打算用作脚本的文件也应该是可导入的。而且简单的导入应该不会导致这个脚本的主函数被执行,这是副作用。main函数应该放在main()函数中。
在Python中,pydoc和单元测试要求模块必须是可导入的。在执行主程序之前,您的代码应该总是检查name== main ,以便在导入模块时不会执行主程序。
def main():
.
if __name__==__main__ :
Main()当模块被导入时,所有的顶层代码都将被执行。使用pydoc时,注意不要调用函数、创建对象或执行不应该执行的操作。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。