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. 创建 .m2 文件夹

    首次使用 Maven 创建 .m2 文件夹 1. cmd2. mvn help:system

  2. python内置函数zip

    zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以 ...

  3. GAN的文献综述

    1.Conditional Generative Adversarial Netwoks Describe GAN: Generative adversarial nets were recently ...

  4. 【Alpha版本】冲刺阶段——Day3

    [Alpha版本]冲刺阶段--Day3 阅读目录 今日进展 问题困难 明日任务 今日贡献量 TODOlist [今日进展] 密码算法方面: 参考了md5/sha1+salt和Bcrypt后,我们决定使 ...

  5. 原生js上传图片时的预览

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  6. 论文翻译——Rapid 2D-to-3D conversion——快速2D到3D转换

    https://blog.csdn.net/qq_33445835/article/details/80143598  目前想做一个关于2D转3D的项目,由于国内资料比较少而且大部分都是基于国外的研究 ...

  7. 【react】兄弟组件的通信方式,传统非redux

    很多用过redux开发的朋友们都知道,一般兄弟组件通信可以使用redux. redux也是近期在挤时间学习中.可能也不是很懂,说不定是有错误的理解,若有.现在虽然自己搭建了一个react+router ...

  8. PHP中array_map与array_column之间的关系分析

    array_map()与array_column()用法如下: array_map();将回调函数作用到给定数组的单元上array_column();快速实现:将二维数组转为一维数组 array_co ...

  9. linux时间修改-hwclock和date

    修改系统时间date 设定日期:date -s 月/日/年,例如设定日期为2018年12月1日,date -s 12/01/2018(年也可以是两位) 设定时间:date -s hh:mm:ss,例如 ...

  10. 关于er模型中的identifying relationship or non-identifying relationship

    最近,主要负责项目管理和领域模型设计方面的工作,昨天在将UML类图转换为ER模型的时候,发现有identifying relationship or non-identifying relations ...