Python编程规范具体内容解析

huangyanli00 2010-03-05

我们在学习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 

要始终将它写成

相关推荐