PEP-8 规范1
代码布局
缩进
每个缩进级别使用4个空格。
延续线应使用Python的隐含线连接在括号,括号和大括号内,或使用悬挂缩进[7],垂直对齐包装元素。使用悬挂式凹痕时,应考虑以下因素;第一行应该没有参数,应该使用进一步的缩进来明确区分自己作为延续线。
对:
#与开口分隔符对齐。
foo = long_function_name(var_one,var_two,
var_three,var_four)
#包括更多缩进以区别于其余部分。
def long_function_name(
var_one,var_two,var_three,
var_four):
打印(var_one)
#悬挂缩进应该添加一个级别。
foo = long_function_name(
var_one,var_two,
var_three,var_four)
错:
#不使用垂直对齐时禁止第一行上的参数。
foo = long_function_name(var_one,var_two,
var_three,var_four)
#由于缩进无法区分,因此需要进一步缩进。
def long_function_name(
var_one,var_two,var_three,
var_four):
打印(var_one)
对于连续线,4空间规则是可选的。
可选的:
#悬挂缩进*可以*缩进到4个空格以外的其他位置。
foo = long_function_name(
var_one,var_two,
var_three,var_four)
当if语句的条件部分长到足以要求它跨多行写入时,值得注意的是两个字符关键字(即if)的组合,加上一个空格,加上一个左括号创建一个自然的多行条件的后续行的4空格缩进。这可能会与嵌套在if语句中的缩进代码集产生视觉冲突,该代码集自然也会缩进到4个空格。这个PEP没有明确地说明如何(或是否)在if语句中进一步在视觉上区分这些条件行和嵌套套件。在这种情况下可接受的选择包括但不限于:
#没有额外的缩进。
if(this_is_one_thing和
that_is_another_thing):
做一点事()
#添加注释,这将在编辑器中提供一些区别
#支持语法高亮显示。
if(this_is_one_thing和
that_is_another_thing):
#由于这两个条件都属实,我们可以讨厌。
做一点事()
#在条件连续行上添加一些额外的缩进。
if(this_is_one_thing
和that_is_another_thing):
做一点事()
(另请参阅下面关于是否在二元运算符之前或之后中断的讨论。)
多行结构上的右括号/括号/括号可以在列表最后一行的第一个非空白字符下排列,如下所示:
my_list = [
1,2,3,
4,5,6,
]
result = some_function_that_takes_arguments(
'a','b','c',
'd','e','f',
)
或者它可以排在启动多线结构的线的第一个字符下面,如:
my_list = [
1,2,3,
4,5,6,
]
result = some_function_that_takes_arguments(
'a','b','c',
'd','e','f',
)
标签或空格
空格是首选的缩进方法。
选项卡应仅用于与已使用选项卡缩进的代码保持一致。
Python 3不允许混合使用制表符和空格来缩进。
使用制表符和空格的混合缩进的Python 2代码应该转换为仅使用空格。
当使用-t选项调用Python 2命令行解释器时,它会发出有关非法混合制表符和空格的代码的警告。使用-tt时,这些警告会出错。强烈推荐这些选项!
最大线长
将所有行限制为最多79个字符。
对于具有较少结构限制(文档字符串或注释)的长文本块,行长度应限制为72个字符。
限制所需的编辑器窗口宽度使得可以并排打开多个文件,并且在使用在相邻列中显示两个版本的代码审查工具时可以正常工作。
大多数工具中的默认包装会破坏代码的可视化结构,使其更难理解。选择限制是为了避免在窗口宽度设置为80的情况下包装在编辑器中,即使工具在包装线条时在最终列中放置标记字形。某些基于Web的工具可能根本不提供动态换行。
有些团队强烈倾向于更长的线路长度。对于专门或主要由可以就此问题达成一致的团队维护的代码,可以将标称行长度从80个字符增加到100个字符(有效地将最大长度增加到99个字符),前提是评论和文档字符串仍然包装72个字符。
Python标准库是保守的,需要将行限制为79个字符(文档字符串/注释限制为72个)。
包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续。通过在括号中包装表达式,可以在多行上分割长行。这些应该优先使用反斜杠来继续行。
反斜杠有时可能仍然合适。例如,long,多个with语句不能使用隐式延续,因此可以接受反斜杠:
with open('/ path / to / some / file / you / want / to / read')as file_1,\
open('/ path / to / some / file / being / written','w')作为file_2:
file_2.write(file_1.read())
(有关这种多行语句缩进的进一步想法,请参见前面关于多行if语句的讨论。)
另一个这样的情况是使用断言语句。
确保适当地缩进续行。
应该在二元运算符之前或之后换行吗?
几十年来,推荐的风格是在二元运算符之后打破。但这会以两种方式损害可读性:操作员倾向于分散在屏幕上的不同列上,并且每个操作符都会从其操作数移到前一行。在这里,眼睛必须做额外的工作来分辨哪些项目被添加以及哪些项目被减去:
#No:操作符远离他们的操作数
income=(gross_wages +
taxable_interest +
(股息 - qualified_dividends) -
ira_deduction -
student_loan_interest)
为了解决这个可读性问题,数学家和他们的出版商遵循相反的惯例。 Donald Knuth在他的计算机和排版系列中解释了传统规则:“虽然段落中的公式总是在二元操作和关系之后中断,但显示的公式总是在二元操作之前中断”[3]。
遵循数学传统通常会产生更易读的代码:
#Yis:易于将操作符与操作数匹配
income=(gross_wages
+ taxable_interest
+(股息 - qualified_dividends)
- ira_deduction
- student_loan_interest)
在Python代码中,只要约定在本地一致,就允许在二元运算符之前或之后中断。对于新代码,建议使用Knuth的样式。
空白行
使用两个空行环绕顶级函数和类定义。
类中的方法定义由单个空行包围。
可以使用额外的空白行(谨慎地)来分离相关功能组。在一堆相关的单行(例如,一组虚拟实现)之间可以省略空行。
在函数中使用空行,谨慎地指示逻辑部分。
Python接受control-L(即^ L)换页符作为空格;许多工具将这些字符视为页面分隔符,因此您可以使用它们来分隔文件相关部分的页面。请注意,某些编辑器和基于Web的代码查看器可能无法将control-L识别为换页符,并且会在其位置显示另一个字形。
源文件编码
核心Python发行版中的代码应始终使用UTF-8(或Python 2中的ASCII)。
使用ASCII(在Python 2中)或UTF-8(在Python 3中)的文件不应具有编码声明。
在标准库中,非默认编码应仅用于测试目的,或者当注释或文档字符串需要提及包含非ASCII字符的作者名称时;否则,使用\ x,\ u,\ U或\ N转义是在字符串文字中包含非ASCII数据的首选方法。
对于Python 3.0及更高版本,标准库规定了以下策略(参见PEP 3131):Python标准库中的所有标识符必须使用仅ASCII标识符,并且应尽可能使用英语单词(在许多情况下,缩写和技术)使用的术语不是英语)。此外,字符串文字和注释也必须是ASCII格式。唯一的例外是(a)测试非ASCII功能的测试用例,以及(b)作者姓名。名称不是基于拉丁字母(latin-1,ISO / IEC 8859-1字符集)的作者必须在此字符集中提供其名称的音译。
鼓励全球受众的开源项目采用类似的政策。
PEP-8 规范1的更多相关文章
- pep 8 规范的一些记录
一.pep8起源 龟叔创立Python的初衷里就有创立一个容易阅读的编程语言,所以亲自操刀写了pep8 代码规范,每个项目开始前都要有一个共识,就是自己的代码规范,pep8 就是一个很好的范本. 二. ...
- 【pep8规范】arc diff 不符合 pep 8 规范
arc land 的时候,arc报错提示代码不符合pep8规范: 1.单行代码过长(括号中的换行不需要加 /) python代码换行加 / https://blog.csdn.net/codechel ...
- Python规范:提高可读性
PEP 8 规范 PEP 是 Python Enhancement Proposal 的缩写,翻译过来叫"Python 增强规范". 缩进规范 PEP 8 规范告诉我们,请选择四个 ...
- 创建成功的Python项目
创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects ...
- 零基础学Python--------第2章 Python语言基础
第2章 Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...
- python 代码检测工具
对于我这种习惯了 Java 这种编译型语言,在使用 Python 这种动态语言的时候,发现错误经常只能在执行的时候发现,总感觉有点不放心. 而且有一些错误由于隐藏的比较深,只有特定逻辑才会触发,往往导 ...
- Python while 1 和 while True 速度比较
References http://legacy.python.org/dev/peps/pep-0285/http://stackoverflow.com/questions/3815359/whi ...
- 程序员需要掌握的七种 Python 代码更易维护的武器
检查你的代码风格 PEP 8 是 Python 代码风格规范,它规定了类似行长度.缩进.多行表达式.变量命名约定等内容.尽管你的团队自身可能也会有稍微不同于 PEP 8 的代码风格规范,但任何代码风格 ...
- [ Python入门教程 ] Python基础语法
Python的语法非常简练,因此用Python编写的程序可读性强.容易理解.本章将介绍Python的基本语法和概念. Python文件类型 1.源代码.Python的源代码的扩展名以py结尾,可直接运 ...
- 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)
让 Python 代码更易维护的七种武器 2018/09/29 · 基础知识 · 武器 原文出处: Jeff Triplett 译文出处:linux中国-Hank Chow 检查你的代码的质 ...
随机推荐
- setTimeout的异步传输机制
setTimeout是异步的,在设置完setTimeout后,指定代码会在设定的时间后加入到任务队列,但并不是立即执行,js是单线程语言,所有的代码按顺序执行,即同步执行,同步执行的代码放在执行队列中 ...
- java程序员应该知道的20个有用的库
https://blog.csdn.net/weixin_43923408/article/details/87885668
- ListView 视图(View)
自定义视图,设置默认ListView,ListViewItems默认样式 public class VirtualStackPanelView : ViewBase { public static r ...
- VS 解决方案文件结构分析
VS2013 解决方案文件结构分析 Visual Studio 的解决方案文件是一个文本文件,其中的内容不是太复杂,有些时候 Visual Studio 会把这个文件搞乱,理解一下这个文件的结构,对我 ...
- sql、linq和lambda查询语句比较inner join和group by组合使用及匿名类型的处理
使用EF自己做的小功能需要遇到inner join和group by组合使用及匿名类型的处理,搜了很多,基本不能满足自己的需要,所以总结了也实现了就自己写出来,已备查看及伙伴查询参考(一般的语句查询就 ...
- 用户 'IIS APPPOOL\**' 登录失败的解决方案(项目部署到本地IIS上打开网页出现报错)
为开发方便-将项目部署到本地IIS上打开网页出现报错 1.打开IIS管理 2.点击应用池 3.找到你部署的网站名,右键“高级设置”——>“进程模型”——>“标识”修改为localsyste ...
- Java面向对象(static、final、匿名对象、内部类、包、修饰符、代码块)
面向对象 今日内容介绍 u final u static u 匿名对象 u 内部类 u 包的声明与访问 u 四种访问修饰符 u 代码块 第1章 final关键字 1.1 final的概念 继承的出现提 ...
- log4j.properties配置详情
log4j: log for java 是Apache的一个开源项目! 00.将我们的日志信息,输出到指定的位置(控制台 文件中) 01.我们可以控制每一条日志的输出格式 02.我们设置日志信息的 ...
- 初识EditText - 自定义EditText形状
EditText继承自TextView,是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理. 使用 android:hint属性来指定了一段提 ...
- 数据库迁移后报错提示MySQL Error:Can''t find file errno: 13 - Permission denied的解决方法
用户MYSQL数据库迁移后,遇到报错MySQL Error:Can't find file (errno: 13 - Permission denied)使用以下指令重新设置所有者和权限,依然不能解决 ...