代码布局

缩进

每个缩进级别使用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. MySQL数据库(3)

    外键的变种(三种关系),数据的增删改,单表查询,多表查询 一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了 ...

  2. 线程池(2)Executors.newFixedThreadPool

    例子: ExecutorService es = Executors.newFixedThreadPool(5); try { for (int i = 0; i < 20; i++) { Ru ...

  3. Ubuntu 下修改Tomcat和Jetty默认的JDK和初始内存

    修改/etc/default/tomcat  或者  /etc/default/jetty   文件 中的 JAVA_HOME 和 JAVA_OPTS

  4. 告别JQuery(一)

    背景 很多很多传统的Web开发者还在用着传统的jquery和ES5,大家都知道现在的前端如火如荼,但是眼花缭乱的框架和层出不穷的新概念,让很多人无从下手,本文从0开始,带你一步步由jquery操作DO ...

  5. BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法

    最近一直在做互金平台,做到后台提交表单的时候出现验证提交数据一直没有提交的问题.于是百度了一下.果然是版本问题造成的.幸好找到了问题所在.我一直仿照的是东钿原微信平台的做法,但是使用byond的后台框 ...

  6. 关于如何将html中的表格下载成csv格式的方法

    今天在网上看了很多方法,自己还是慢慢探索写出了最终效果 简单代码如下: <!DOCTYPE html> <html> <head> <meta content ...

  7. 像音乐播放App一样移动背景

    如果你经常听歌,你会发现歌曲app的背景会随着音乐移动的,从左到右或者从上到下,这种动画虽然简单,但是这里有一个技巧.如果你还不明白这种动效看看下面的demo (更多详细请参考:https://git ...

  8. 修复使用<code>XmlDocument</code>加载含有DOCTYPE的Xml时,加载后增加“[]”字符的错误

    C# LINQ TO XML - Remove “[]” characters from the DTD header http://stackoverflow.com/questions/12358 ...

  9. Windows基础环境_安装配置教程(Windows7 64、JDK1.8、Android SDK23.0、TortoiseSVN 1.9.5)

    Windows基础环境_安装配置教程(Windows7 64.JDK1.8.Android SDK23.0.TortoiseSVN 1.9.5) 安装包版本 1)     JDK版本包 地址: htt ...

  10. userBean-作用范围session

    package com.java1234.model; public class Student { private String name;private int age; public Strin ...