Python编程规范具体内容解析
我们在学习Python编程语言之前,首先要了解的就是这一编程语言的一些主要的编码规范。我们今天就为大家详细介绍一下Python编程规范的相关内容,希望大家可以从中获得一些帮助,以方便将来的学习应用。
Python编程规范之缩进
使用Emacs的Python-mode的默认值:4个空格一个缩进层次。对于确实古老的代码,你不希望产生混乱,可以继续使用8空格的制表符(8-space tabs)。Emacs Python-mode自动发现文件中主要的缩进层次,依此设定缩进参数。
Python编程规范之制表符还是空格
永远不要混用制表符和空格。最流行的Python缩进方式是仅使用空格,其次是仅使用制表符,混合着制表符和空格缩进的代码将被转换成仅使用空格。(在Emacs中,选中整个缓冲区,按ESC-x去除制表符。)调用Python命令行解释器时使用-t选项,可对代码中不合法得混合制表符和空格发出警告,使用-tt时警告将变成错误。这些选项是被高度推荐的。
对于新的项目,强烈推荐仅使用空格而不是制表符。许多编辑器拥有使之易于实现的功能(在Emacs中,确认indent-tabs-mode是nil)。
Python编程规范之行的最大长度
周围仍然有许多设备被限制在每行80字符:而且,窗口限制在80个字符。使将多个窗口并排放置成为可能。在这些设备上使用默认的折叠方式看起来有点丑陋。因此,请将所有行限制在最大79字符(Emacs准确得将行限制为长80字符),对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在72字符。
折叠长行的首选方法是使用Pyhon支持的圆括号,方括号和花括号内的行延续。如果需要,你可以在表达式周围增加一对额外的圆括号,但是有时使用反斜杠看起来更好,确认恰当得缩进了延续的行。
Emacs的Python-mode正确得完成了这些。一些例子:
#!Python class Rectangle(Blob): def __init__(self,width,height,color='black', emphasis=None,highlight=0): if width == 0 and height == 0 and \ color == 'red' and emphasis == 'strong' or \ highlight > 100: raise ValueError, "sorry, you lose" if width == 0 and height == 0 and (color == 'red' or emphasis is None): raise ValueError,"I don't think so" Blob.__init__(self,width,height,color,emphasis,highlight)
Python编程规范之空行
用两行空行分割顶层函数和类的定义,类内方法的定义用单个空行分割,额外的空行可被用于(保守的)分割相关函数组成的群,在一组相关的单句中间可以省略空行。(例如:一组哑元素)。
当空行用于分割方法的定义时,在‘class’行和第一个方法定义之间也要有一个空行。在函数中使用空行时,请谨慎的用于表示一个逻辑段落。Python接受contol-L(即^L)换页符作为空格:Emacs(和一些打印工具),视这个字符为页面分割符,因此在你的文件中,可以用他们来为相关片段分页。
Python编程规范之编码
Python核心发布中的代码必须始终使用ASCII或Latin-1编码(又名 ISO-8859-1),使用ASCII的文件不必有编码cookie,Latin-1仅当注释或文档字符串涉及作者名字需要Latin-1时才被使用:
另外使用\x转义字符是在字符串中包含非ASCII(non-ASCII)数据的首选方法。
作为PEP 263实现代码的测试套件的部分文件是个例外。
Python编程规范之导入
通常应该在单独的行中导入(Imports),例如:
No:import sys, os
Yes:import sys
import os
但是这样也是可以的:
from types import StringType, ListType
Imports 通常被放置在文件的顶部,仅在模块注释和文档字符串之后,在模块的全局变量和常量之前。Imports应该有顺序地成组安放:
1、标准库的导入(Imports )
2、相关的主包(major package)的导入(即,所有的email包在随后导入)
3、特定应用的导入(imports)
你应该在每组导入之间放置一个空行,对于内部包的导入是不推荐使用相对导入的,对所有导入都要使用包的绝对路径。
从一个包含类的模块中导入类时,通常可以写成这样:
from MyClass import MyClass
from foo.bar.YourClass import YourClass
如果这样写导致了本地名字冲突,那么就这样写
import MyClass
import foo.bar.YourClass
即使用"MyClass.MyClass"和"foo.bar.YourClass.YourClass"
表达式和语句中的空格
Guido不喜欢在以下地方出现空格:
紧挨着圆括号,方括号和花括号的,如:"spam( ham[ 1 ],{ eggs:2 } )"。要始终将它写成"spam(ham[1],{eggs: 2})"。
紧贴在逗号,分号或冒号前的,如:
"if x == 4:print x,y:x,y = y,x"。要始终将它写成
"if x == 4:print x,y:x,y = y,x"。
紧贴着函数调用的参数列表前开式括号(open parenthesis )的,如"spam (1)"。要始终将它写成"spam(1)"。
紧贴在索引或切片,开始的开式括号前的,如:
"dict ['key'] = list [index]"。要始终将它写成"dict['key'] = list[index]"。
在赋值(或其它)运算符周围的用于和其它并排的一个以上的空格,如:
#!Python x= 1 y= 2 long_variable = 3
要始终将它写成