本节收录了稍作剪辑的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历史和经验的绝佳来源,也是当前议题和将来计划的解释。
简介
本文档给出的Python编码约定,适用于由Python主发行版本中的标准库构成的代码。有关Python的C实现中的C代码风格指南,参见相应的PEP。本文档改编自Guido最初的Python风格指南文章,并加入了Barry风格指南的一些内容。如果与Guido的风格规则存在冲突,应该遵从本PEP。本PEP可能尚未完结
(其实可能永远不会完结)
。
盲目的一致性是头脑简单的表现
Guido的一个重要观点是,代码被阅读的次数远多于被编写的次数。本指南旨在提高代码的可读性,使各种各样的Python代码能保持风格一致。正如PEP 20所述,“Readability counts”
(注重可读性)
。
风格指南是讨论一致性的。与风格指南保持一致很重要。维持同一个项目内部的一致性更加重要。而保证同一个模块和函数内部的一致性则最重要。
然而最最重要的是,知道何时应打破一致性,有时风格指南并不适用。如果心存疑虑,请采用自己的最佳判断。请看看别人的例子并做出最佳决定。不要犹豫,尽管发出疑问。
以下是两个打破规范的好理由。
代码布局
1.
每级缩进采用4个空格。
为了对付那些确实陈旧的代码,又不愿做出清理,那么可以继续沿用8个空格长度的制表符。
2.
绝对禁止制表符和空格的混用。
最流行的Python缩进方式是只使用空格。第二流行的方式是只使用制表符。混合使用制表符和空格进行缩进的代码,应该转换为只使用空格的方式。如果调用Python命令行解释器时带上
-t
参数,它就会对非法混用制表符和空格的代码发出警告。如果用了
-tt
参数,这些警告就会上升为错误。强烈推荐使用这些参数!
对全新的项目而言,强烈建议只用空格缩进,换掉所有的制表符。大部分编辑器都具备将制表符替换为空格的便捷功能。
3.
所有行都应限制在79个字符以内。
将行长限制在80个字符的设备还有很多,而且将窗口限制为80个字符宽就可以并排放置多个窗口。这些设备上的默认换行会破坏代码的外观,增加理解的难度。因此,请将所有行都限制在79个字符以内。对于连续的大段文字
(文档字符串或注释)
,建议将行长限制在72个字符以内。
对长行进行换行的首选方案,是利用Python隐含的行连接特性,在圆括号、方括号和大括号内部进行断行。必要时可以在表达式外面多加一对圆括号,不过有时候用反斜杠会更好看些。请确保对后续行进行适当的缩进。打断二元运算符的首选位置是在运算符之后,而不是运算符之前。下面给出一些例子:
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, you lose")
8
if width ==
0
and height ==
0
and (color ==
'red'
or
9 emphasis
is
None):
10
raise ValueError(
"I don't think so -- values are %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
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
正确:
错误:
正确:
1dict[
'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
)。
正确:
1i = i + 1
2submitted += 1
3
4x = x * 2 – 1
5hypot2 = x * x + y * y
6c = (a + b) * (a - b)
错误:
1i=i+1
2submitted +=1
3x = x*2 – 1
4hypot2 = x*x + y*y
5c = (a+b) * (a-b)
正确:
1def
complex(
real,
imag=
0.0):
2
return magic(r=
real, i=
imag)
错误:
1def
complex(
real,
imag =
0.0):
2
return magic(r =
real, i =
imag)
正确:
1
if foo ==
'blah':
2 do_blah_thing()
3do_one()
4do_two()
5do_three()
最好不要:
1
if foo ==
'blah': do_blah_thing()
2do_one(); do_two(); do_three()
最好不要:
1
if foo ==
'blah': do_blah_thing()
2
for x
in lst: total += x
3
while t < 10: t = delay()
绝对不要:
1
if foo ==
'blah': do_blah_thing()
2
else: do_non_blah_thing()
3
try: something()
4
finally: cleanup()
5do_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的使用经验。