代码布局

缩进

每个缩进级别使用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的更多相关文章

  1. pep 8 规范的一些记录

    一.pep8起源 龟叔创立Python的初衷里就有创立一个容易阅读的编程语言,所以亲自操刀写了pep8 代码规范,每个项目开始前都要有一个共识,就是自己的代码规范,pep8 就是一个很好的范本. 二. ...

  2. 【pep8规范】arc diff 不符合 pep 8 规范

    arc land 的时候,arc报错提示代码不符合pep8规范: 1.单行代码过长(括号中的换行不需要加 /) python代码换行加 / https://blog.csdn.net/codechel ...

  3. Python规范:提高可读性

    PEP 8 规范 PEP 是 Python Enhancement Proposal 的缩写,翻译过来叫"Python 增强规范". 缩进规范 PEP 8 规范告诉我们,请选择四个 ...

  4. 创建成功的Python项目

    创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects ...

  5. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  6. python 代码检测工具

    对于我这种习惯了 Java 这种编译型语言,在使用 Python 这种动态语言的时候,发现错误经常只能在执行的时候发现,总感觉有点不放心. 而且有一些错误由于隐藏的比较深,只有特定逻辑才会触发,往往导 ...

  7. Python while 1 和 while True 速度比较

    References http://legacy.python.org/dev/peps/pep-0285/http://stackoverflow.com/questions/3815359/whi ...

  8. 程序员需要掌握的七种 Python 代码更易维护的武器

    检查你的代码风格 PEP 8 是 Python 代码风格规范,它规定了类似行长度.缩进.多行表达式.变量命名约定等内容.尽管你的团队自身可能也会有稍微不同于 PEP 8 的代码风格规范,但任何代码风格 ...

  9. [ Python入门教程 ] Python基础语法

    Python的语法非常简练,因此用Python编写的程序可读性强.容易理解.本章将介绍Python的基本语法和概念. Python文件类型 1.源代码.Python的源代码的扩展名以py结尾,可直接运 ...

  10. 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)

    让 Python 代码更易维护的七种武器 2018/09/29 · 基础知识 · 武器 原文出处: Jeff Triplett   译文出处:linux中国-Hank Chow    检查你的代码的质 ...

随机推荐

  1. 043 Multiply Strings 字符串相乘

    给定两个以字符串表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积.注意:    num1 和 num2 的长度均小于110.    num1 和 num2 均只包含数字 0 ...

  2. 开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用

    项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...

  3. Date 对象 时间格式注意事项

    Date 对象,是操作日期和时间的对象. Date 为内置的构造函数, 通过 new Date () 来获取当前本地日期与时间 const time = new Date console.log(ti ...

  4. C#小记

    1.背景:用fileinput 上传文件 直接上传文件,但有时会发现,这个不上传文件也是可以携带其他参数的, 如果直接用: uploadFile = context.Request.Files[]; ...

  5. 【复习笔记】HTML基础

    编码 HTML LANG标注整体文档语言 常用编码:ASCII.GB2312.UTF-8 中文编码解决: 1.浏览器要用一个编码表去看你的文件<meta charset="utf-8& ...

  6. Android 使用NestedScrollView+ViewPager+RecyclerView+SmartRefreshLayout打造酷炫下拉视差效果并解决各种滑动冲突

    如果你还在为处理滑动冲突而发愁,那么你需要静下心来看看这边文章,如果你能彻底理解这篇文章中使用的技术,那么,一切滑动冲突的问题解决起来就轻而易举了: 先扔一个最终实现的效果图 先分析下效果图中实现的功 ...

  7. [Eclipse] - 解决"Java was started but returned exit code = 13"问题

    最近遇到一个问题,打开Eclipse时会弹出如下对话框 在网上查找了相关资料后结合自己的问题,总结如下. 导致问题的原因: 1. 通常的原因是安装的Eclipse的版本或者Java JDK的版本不匹配 ...

  8. jquery.page.js插件在使用时重复触发“上一页”和“下一页”操作

    jquery.page.js使用demo HTML代码 <div class="result"> <div class="tcdPageCode&quo ...

  9. BZOJ 2539: [Ctsc2000]丘比特的烦恼

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 695  Solved: 260[Submit][Status][Discuss] Description ...

  10. [神经网络]一步一步使用Mobile-Net完成视觉识别(三)

    1.环境配置 2.数据集获取 3.训练集获取 4.训练 5.调用测试训练结果 6.代码讲解 本文是第三篇,获取tfboard训练集. 前面我们拿到了所有图片对应的标注信息的xml文件,现在我们需要先把 ...