本节收录了稍作剪辑的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隐含的行连接特性,在圆括号、方括号和大括号内部进行断行。必要时可以在表达式外面多加一对圆括号,不过有时候用反斜杠会更好看些。请确保对后续行进行适当的缩进。打断二元运算符的首选位置是在运算符之后,而不是运算符之前。下面给出一些例子:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''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' oremphasis is None):raise ValueError("I don't think so -- values are %s, %s" %(width, height))Blob.__init__(self, width, height,color, emphasis, highlight)

4. 空行

顶级函数和类定义之间,请用两个空行分隔。

类内部的各个方法定义之间,请用1个空行分隔。

为了让有关联的函数成组,可以在各函数组之间有节制地添加空行。相互关联的一组单行函数之间,可以省略空行,如一组函数的伪实现(dummy implementation)。

函数内部可以有节制地用空行来区分出各个逻辑部分。

Python可将Ctrl+L(^L)换页符接受为空白符。很多工具都将其视为分页符,所以可以利用其进行分页,使得文件中的关联部分单独成页。

5. 导入

导入语句通常应单独成行,例如:

import os
import sys

不要像下面这样写在一起:

import sys, os

不过下面的写法没有问题:

from subprocess import Popen, PIPE

导入语句通常位于文件的顶部,紧挨着模块注释和文档字符串后面,在模块全局变量和常量定义之前。
导入语句应按照以下顺序进行分组。

(1)标准库的导入。
(2)相关第三方库的导入。
(3)本地应用程序/库——特定库的导入。

每组导入语句之间请加入1个空行。

任何对应的__all__声明都应位于导入语句之后。

非常不推荐对内部包的导入使用相对导入语法。请始终对所有导入都使用绝对包路径。即便Python 2.5现在已完全实现了PEP 328,它的显式相对导入语法也是强烈不推荐的。绝对导入的可移植性更好,通常可读性也会更好。

如果是从包含类的模块中导入类,通常可以采用如下写法:

from myclass import MyClass
from foo.bar.yourclass import YourClass

如果上述写法会导致本地命名冲突,就采用如下写法:

import myclass
import foo.bar.yourclass

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

6. 表达式和语句内的空白符

讨厌之事——以下场合应避免使用多余的空白符。
紧靠小括号、中括号或大括号内部。
正确:

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

紧挨着函数参数列表的左括号之前。
正确:

spam(1)

错误:

spam (1)

紧挨着索引或切片操作的左括号之前。
正确:

dict['key'] = list[index]

错误:

dict ['key'] = list [index]

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

x = 1
y = 2
long_variable = 3

错误:

x                = 1
y                = 2
long_variable    = 3

7. 其他建议

始终在以下二元操作符两侧各放1个空格:赋值(=)、增量赋值(+=,-=等)、比较(==、<、>、!=、<>、<=、>=、in、not、in、is、is not)、布尔(and、or、not)。
在数学运算符两侧放置空格。
正确:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''i = i + 1
submitted += 1x = x * 2 – 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)

错误:

i=i+1
submitted +=1
x = x*2 – 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

在用于指定关键字参数或默认参数值时,请勿在=两边使用空格。
正确:

def complex(real, imag=0.0):return magic(r=real, i=imag)

错误:

def complex(real, imag = 0.0):return magic(r = real, i = imag)

通常不鼓励使用复合语句,也就是在同一行放置多条语句。
正确:

if foo == 'blah':do_blah_thing()
do_one()
do_two()
do_three()

最好不要:

if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

虽然有时候将小块代码和if/for/while放在同一行没什么问题,但多行语句绝对不能如此。同时还要避免过长代码行的折叠!
最好不要:

if foo == 'blah': do_blah_thing()
for x in lst: total += xwhile t < 10: t = delay()

绝对不要:

if foo == 'blah': do_blah_thing()
else: do_non_blah_thing()
try: something()
finally: cleanup()
do_one(); do_two(); do_three(long, argument, list, like, this)
if foo == 'blah': one(); two(); three()

Python 编码风格指南相关推荐

  1. Python编码风格指南

    来源 | 异步图书 本节收录了稍作剪辑的PEP 8摘要(Python Enhancement Proposal,Python增强提案).PEP 8由Guido van Rossum和Barry War ...

  2. Python 编码风格参考

    2019独角兽企业重金招聘Python工程师标准>>> 代码除了用来运行外,更多的是用来读.为了是代码的可读性更强,很多编程语言都有自己的编码规范.规范的制定是为了保持代码的一致性, ...

  3. c++编码风格指南_100%正确编码样式指南

    c++编码风格指南 Tabs or spaces? Curly brace on the same line or a new line? 80 character width or 120? 制表符 ...

  4. Python 代码风格指南谷歌版

    非常感谢我们的忠实读者 shendeguize,在后台留言告诉我,已经翻译了<谷歌Python代码风格指南> ,大家这样相互帮助,感觉真是太好. Update: 2020.01.31 Tr ...

  5. python代码风格指南_记录Python代码:完整指南

    python代码风格指南 Welcome to your complete guide to documenting Python code. Whether you're documenting a ...

  6. PEP8 - Python 代码风格指南中英对照

    PEP8 - Python 代码风格指南中英对照 Introduction A Foolish Consistency is the Hobgoblin of Little Minds Code la ...

  7. python代码风格指南:pep8 中文翻译

    摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见​PEP7.本文和​PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...

  8. Google 内部的 Python 代码风格指南(译)

    微信搜索逆锋起笔关注后回复编程pdf 领取编程大佬们所推荐的 23 种编程资料! 来自:Why GitHub? 链接:https://github.com/shendeguize/GooglePyth ...

  9. Google内部 Python 代码风格指南(中文版)

    文末有干货 "Python高校",马上关注 真爱,请置顶或星标 这是一位大佬翻译的Google Python代码风格指南,很全面.可以作为公司的code review 标准,也可以 ...

最新文章

  1. spark2读取oracle工具类,spark读写Oracle、hive的艰辛之路(一)
  2. 所有雷电接口电脑5分钟内即可破解,漏洞无法软件修复,微软Surface笑了
  3. 管理信息系统 课程设计(2018-6-16)
  4. C#设计模式(9)——装饰者模式(Decorator Pattern)
  5. mathmagic_MathMagic pro
  6. lintcode:Add Binary 二进制求和
  7. 深入浅出Python——Python基础语法全解
  8. 瑞星杀毒软件linux序列号,瑞星杀毒软件2007光盘零售版是面向 Linux的?
  9. 联想ih81m主板说明书_一体化折叠设计将便捷进行到底!联想ThinkVision 便携显示器评测...
  10. 遇到问题---linux--shell--Argument list too long
  11. 汽车制造行业OEM Tier1 Tier2指代什么?
  12. python中快速验证输入的是否为回文
  13. 分布式和集中式版本控制工具-svn,git,mercurial比较分析
  14. 没有基础可以学画插画吗?怎么学?
  15. 详解文件存储空间管理中的位示图法
  16. sqlite数据库自动生成db-journal后缀文件的解决方法
  17. Python的标识符命名规范
  18. Spark基础测试题
  19. iOS百思不得姐、ARKit、旋转动画、立体相册源码等
  20. Ruby 简单入门(二)

热门文章

  1. 安装XCode7.1后,QT5.5出现的各种问题解决方案
  2. [Apache] Apache 從 2.2 換至 2.4 httpd.conf 的調整筆記 (windows 環境)
  3. 恢复xfs文件系统superblock实验
  4. DataTable 转 Entity
  5. boot分布式计算 spring_springboot05-分布式系统理念
  6. 数据结构哪本书比较好_东莞工厂电动伸缩门固定在哪一边比较好?
  7. FM对采购业务的预算控制
  8. ABAP销售合同冻结Bapi
  9. PP模块常用事务代码清单
  10. [三代] 获取BADI对象的两种方法