1 Introduction


Guido 的核心思想是:对于代码而言,相比于写,它更多是被用来读的。这个指导旨在使Python代码更易读,且具有更强的协调性。

2 A Foolish Consistency is the Hobgoblin of Little Minds


然而有些情况下遵从guide不是很合适,要学会变通,查看其他人的代码,并且不要害怕提问

当遵从guideline的是会降低可读性、降低继承性/可移植性、使得代码无法与环境中其他代码兼容、需要和其他不符合这个guide的其他python版本代码兼容的时候,记得变通。

3 Code lay-out


·使用四个空格缩进,python3不兼容tab与空格混用;

·每行不超过80个字符。为了保证代码段可以自由左右移动,建议一行不超过72个字符。有些团队会有大于80的行字符限制,但是注释仍然应保持在72字符以内

·长的行需要换行的时候,使用Python自动连接括号(或者方括号、花括号)内的内容的功能,不要使用强制换行符。换行的时候注意内容的垂直对齐,增加一级缩进以防歧义或识别不明。在不能使用空格的时候才用\换行

·当if的条件很复杂的时候,在使用 “if (...”的形式可以形成自然的四格缩进,会导致歧义;有以下的解决方案——增加一行注释来区分内容和条件;增加多是缩进来区分内容和条件

·多行内容结束时,右括号可以放在最后一行内容第一个字符的正下方或者是开始这个多行语句的正下方。

·在二元操作符之前换行会使代码更整齐

·在class和一级函数上用两个空行,类内的函数使用一个空行,可以用多的空行来区分不同块的函数,简单的程序间可以省略空行

·应该使用UTF-8(python3)或ASCII(python2)编码,按此规范编码的程序不需要声明。非标准编码方式应该只在测试需要的情况或者注释中使用。

·在python3及以上的版本中,只使用ASCII编码字符作为标识符(identifiers),并且尽量使用英文词汇作为标识符。除了1)测试集中含有非ASCII字符,2)作者的姓名(不基于拉丁语系的字母必须给出拉丁文翻译),这两个情况之外,字符串和注释也必须使用ASCII字符。

·import的时候不同的库分开引用,但是可以将从同一个库中引用的模块合并写。总是在文件开头就进行引用——在注释、文件信息之后,全局模块、常量之前。

·import应按照以下顺序分组(用空行隔开组):1)标准库,2)相关的第三方库,3)本地的库或特殊引用

·建议精确引用以提升可读性、稳定性。除非精确引用会导致本地变量名的冲突。避免在引用时使用通配符*

·模块级别的“dunders”(例如__all__,__author__等)应该放在文件头说明之后、引用之前。这个类型的赋值也应放在import之前。

4 String Quotes


固定一种字符串的符号,并在内容中出现歧义的时候用另外一种代替,避免使用\符号以增加可读性。

5 Whitespace in Expressions and Statements


·括号两侧、冒号,分号之前、’不用空格

·关于切片的空格没看懂,大体是要统一、可以看作二元操作符

·总是在 =(赋值), += ,-=,==,<,>,!=,<=,>=,in,not in, is,is not, and or not,->等二元操作符两侧加空格

·当有多级优先级运算的时候,在最低级的操作符两侧加空格

·在=表示变量默认值的时候 不用加空格

·不要在同一行里做多个操作

6 When to use trailing commas


https://www.python.org/dev/peps/pep-0008/#id29

7 Comments


·注释应该是完整的句子,并且保证句首大写(除非句首是个小写的变量名),长句子要在句尾加句号,在句尾句号之后用两个空格隔开。

·注释块:和被注释的对象统一缩进等级。每一行以“# ”开头,边缘用一行“#”表示

·行内注释:至少要空开两格再开始写,同样以“# ”开头

·文档的注释串:为所有public的模块、函数、类、methods写注释。不是所有非public都要有注释,但是你应该为它写一个评论来说明功能,在def下面一行。注意,多行的注释结束时的”””应该另起一行

8 Naming Conventions


python 的library是混乱的,所以永远不能指望这部分能完全一致,下面有些推荐的命名标准。新写的包应该遵循以下标准,已经写好的就不管了。

overriding principle:使用当前API时可见的变量名应该反应其作用

Descriptive--Naming Styles:

保持统一的风格

使用首字母大写的时候,缩写单词要全大写——HTTPSeverError

不要自己发明这样形式的名字:__haha__

Prescriptive--Name Conventions:

·不要使用小写l,大写O,大写I作为单个字母变量名

·应该使用标准ASCLII编码字符作为变量名

·module:短的、全小写的名字。可以用下划线增加可读性,但是不鼓励。当C或C++模块是更高级的时候,在开头加一个下划线 标明

·Class:首字母大写格式CapWords,可以使用函数的命名约定来代替在借口被记录并主要用作可调用的情况。类内命名有多中形式——单个词或者两个词连着写,首字母大写的情况只用于exception和constants

·Type variables:首字母大写,并且简写。AnyStr,建议在covariant或vontravariant行为的时候使用“_co”,"_contra"后缀。例如:VT_co = TypeVar('VT_co', covariant=True)

·Exception:应该是类,所以用类的命名方式,但是应该加上“Error”后缀(如果是一个错误的话)

·Global Variable:假设只在一个模块里面用。具有 from M import * 功能的模块应该使用__all__机制来防止导出全局变量,或者使用之前的在前面加前缀的方式来防止这一点。

·Function:小写,单词用下划线隔开。混合形式只在之前使用过这样的形式里使用来保持与之前的兼容。

·Function and method argument:总是在第一次出现instance methods的argument时使用self;在第一次出现class methods 的 argument的时候使用cls。在出现和保留字冲突的时候,在单词后面加一个下划线比使用简写或者其他拼写更好。

·Method names and instance variables:使用function的命名规则——小写字母加下划线。仅在非public methods和instance variables的时候使用开头下划线。为了防止和子类的冲突,在开头使用双下划线来激活python的命名 mangling规则(使用Foo.__a无法调用,而应该使用Foo._Foo__a)

·Constants:通常是在模块里的常量,全大写、用下划线隔开:MAX_OVERFLOW,TOTAL

·总是确定methods 和instance variables 是否全局可用,不确定的时候用non-public。全局变量是在那些和当前类不相关的用户使用的。[这块后面还有好多,暂时用不到,以后看]

Public and internal interfaces

9 Programming Recommendations


·程序需要在其他平台也可用:不要依赖Cpy的字符串加法 而是用join

·None值的判定总是使用 is或者 is not 而不是使用等于操作,然后在bool变量的时候可能会有歧义——if x 表示 if x is not None

· 使用 is not 而不是 not ... is

·在 implement 比较顺序函数的时候,同时implement六个操作(__eq__,__ne__,__lt__,__le__,__gt__,__ge__)而不是仅包含部分操作符

·总是使用 def 而不是lambda表达式赋值来表示一个直接的函数

·Exception 和BaseException

·raise

·except

·system error

·try

·with

·保证函数要么所有情况都有返回值要么都没有

·使用string method 而不是string modulw

·使用 ''.startswith()和''.endswith()而不是string切片来检查前后缀,其他的比较应该用isinstance()而不是直接比较type()函数值

·在判断序列是否为空的时候,使用if seq ,而不是 if len(seq)

·不要依赖字符串结尾的空格

·不要用 True来判断boolean值:

  yes:   if greeting

  no:       if greeting == Ture

Worse: if greeting is True

·Function Annotations

Python 编码规范 PEP8的更多相关文章

  1. Python编码规范(PEP8)

    Introduction 介绍 本文提供的Python代码编码规范基于Python主要发行版本的标准库.Python的C语言实现的C代码规范请查看相应的PEP指南1. 这篇文档以及PEP 257(文档 ...

  2. 002.[python学习]python编码规范pep8学习——PEP8第一部分代码布局

    关于PEP8的详细说明可以参考官方原文:http://legacy.python.org/dev/peps/pep-0008/ 我参考官方文档及其他文章,摘出相关内容而得此文章,具体参考其他文章见文中 ...

  3. Python编码规范(PEP8)及奇技淫巧(不断更新)

    https://blog.csdn.net/MrLevo520/article/details/69155636

  4. PEP8 - Python编码规范

    PEP8 - Python编码规范 PEP8 规范 官方文档:https://www.python.org/dev/peps/pep-0008/ PEP8 规范 中文翻译:http://www.cnb ...

  5. PEP8 Python 编码规范整理(转)

    决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...

  6. python——PEP8 Python 编码规范整理

    决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...

  7. PEP8 Python 编码规范整理(Python)

    add by zhj: 这个是豆瓣网友整理的PEP8,算是PEP8的一个简易版本,因为原PEP8内容太多,所以建议先看这篇文章,然后再看PEP8中文翻译 原文:http://www.douban.co ...

  8. python编码规范

    python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...

  9. 【转】python编码规范

    http://blog.csdn.net/willhuo/article/details/49300441 决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是 ...

随机推荐

  1. 使用IntelljIDEA生成接口的类继承图及装饰器模式

    类图生成方法 以一个装饰器模式实现数学运算的例子为例. 安装 Intellj Ultimate , lience server: http://xdouble.cn:8888/ 在类上右键点击 cla ...

  2. python 将字节字符串转换成十六进制字符串

    想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串 1)只是简单的解码或编码一个十六进制的原始字符串,可以使用 binascii模块 >>> s ...

  3. Java并发编程:volatile关键字解析-转

    Java并发编程:volatile关键字解析 转自海子:https://www.cnblogs.com/dayanjing/p/9954562.html volatile这个关键字可能很多朋友都听说过 ...

  4. 设计模式之Memento(备忘机制)(转)

    Memento定义: memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. Memento模式相对也比较好理解,我们看下列代码: public clas ...

  5. Win10,Office2013出现“您的组织策略阻止我们为您完成此操作”怎么解决?

    "Windows Registry Editor Version 5.00"这是Windows注册表编辑器5.00版的意思新建一个记事本文件,将以下代码直接复制到新建的文本文件中: ...

  6. JAVA 中的 Collection 和 Map 以及相关派生类的概念

    JAVA中Collection接口和Map接口的主要实现类   Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的 ...

  7. vue路由6:导航钩子

    <div id="app"> <div> <router-link to="/">首页</router-link> ...

  8. What’s WOYO PDR-007 Paintless Dent Repair Heat Induction?

    when you car body with dent, which tools can fixing this problem? is there a device which with the c ...

  9. js中使用0 “” null undefined {}需要注意

    注意:在js中0为空(false) ,代表空的还有“”,null ,undefined: 如果做判断if(!上面的四种值):返回均为false console.log(!null);// true c ...

  10. 关于web.xml中配置Spring字符编码过滤器以解决中文乱码的问题

    当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决,如下代码所示: <!-- Spring字符编码过滤器:解决中文乱码问题 --> < ...