比较需要注意的

缩进

  1. 每一级缩进使用4个空格。

  2. 续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐3。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。

  3. 推荐:


# 与左括号对齐 foo = long_function_name(var_one, var_two, var_three, var_four) # 用更多的缩进来与其他行区分 def long_function_name( var_one, var_two, var_three, var_four): print(var_one) # 挂行缩进应该再换一行 foo = long_function_name( var_one, var_two, var_three, var_four)
  1. 不推荐:

# 没有使用垂直对齐时,禁止把参数放在第一行 foo = long_function_name(var_one, var_two, var_three, var_four) # 当缩进没有与其他行区分时,要增加缩进 def long_function_name( var_one, var_two, var_three, var_four): print(var_one)

行的最大长度

  1. 所有行限制的最大字符数为79。

  2. 没有结构化限制的大块文本(文档字符或者注释),每行的最大字符数限制在72。

空行

顶层函数和类的定义,前后用两个空行隔开。

类里的方法定义用一个空行隔开。

Imports 导入

  1. 导入通常在分开的行,例如:

推荐: import os import sys 不推荐: import sys, os 也可以: from subprocess import Popen, PIPE
  1. 导入总是位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。

  2. 导入应该按照以下顺序分组:

    1. 标准库导入

    2. 相关第三方库导入

    3. 本地应用/库特定导入

    4. 你应该在每一组导入之间加入空行。

  3. 推荐使用绝对路径导入,如果导入系统没有正确的配置(比如包里的一个目录在sys.path里的路径后),使用绝对路径会更加可读并且性能更好(至少能提供更好的错误信息):

Comments 注释

  1. 与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更新对应的注释!

  2. 注释应该是完整的句子。如果一个注释是一个短语或句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。

  3. 如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。

  4. 在句尾结束的时候应该使用两个空格。

  5. 当用英文书写时,遵循Strunk and White (译注:《Strunk and White, The Elements of Style》)的书写风格。

  6. 在非英语国家的Python程序员,请使用英文写注释,除非你120%的确信你的代码不会被使用其他语言的人阅读。

Block Comments 块注释

  1. 块注释通常适用于跟随它们的某些(或全部)代码,并缩进到与代码相同的级别。块注释的每一行开头使用一个#和一个空格(除非块注释内部缩进文本)。

  2. 块注释内部的段落通过只有一个#的空行分隔。

Inline Comments 行内注释

1.有节制地使用行内注释。

2.行内注释是与代码语句同行的注释。行内注释和代码至少要有两个空格分隔。注释由#和一个空格开始。

  1. 事实上,如果状态明显的话,行内注释是不必要的,反而会分散注意力。比如说下面这样就不需要:

x = x + 1 # Increment x

但有时,这样做很有用:


x = x + 1 # Compensate for border

Documentation Strings 文档字符串

  1. 要为所有的公共模块,函数,类以及方法编写文档说明。

  2. 非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后。

  3. PEP 257描述了写出好的文档说明相关的约定。特别需要注意的是,多行文档说明使用的结尾三引号应该自成一行,例如:


"""Return a foobang Optional plotz says to frobnicate the bizbaz first. """
  1. 对于单行的文档说明,尾部的三引号应该和文档在同一行。

约定俗成的命名约定

Names to Avoid 应避免的名字
  1. 永远不要使用字母‘l’(小写的L),‘O’(大写的O),或者‘I’(大写的I)作为单字符变量名。

  2. 在有些字体里,这些字符无法和数字0和1区分,如果想用‘l’,用‘L’代替。

Class Names 类名
  1. 类名一般使用首字母大写的约定。

  2. 在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。

  3. 注意,对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。

Function Names 函数名
  1. 函数名应该小写,如果想提高可读性可以用下划线分隔。

  2. 大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用(比如 threading.py),保持向后兼容性。

Function and method arguments 函数和方法参数
  1. 始终要将 self 作为实例方法的的第一个参数。

  2. 始终要将 cls 作为类静态方法的第一个参数。

  3. 如果函数的参数名和已有的关键词冲突,在最后加单一下划线比缩写或随意拼写更好。因此 class_ 比 clss 更好。(也许最好用同义词来避免这种冲突)

Programming Recommendations 编程建议

  1. 代码应该用不损害其他Python实现的方式去编写(PyPy,Jython,IronPython,Cython,Psyco 等)。 比如,不要依赖于在CPython中高效的内置字符连接语句 a += b 或者 a = a + b。这种优化甚至在CPython中都是脆弱的(它只适用于某些类型)并且没有出现在不使用引用计数的实现中。在性能要求比较高的库中,可以种 ”.join() 代替。这可以确保字符关联在不同的实现中都可以以线性时间发生。

  2. 和像None这样的单例对象进行比较的时候应该始终用 is 或者 is not,永远不要用等号运算符。

另外,如果你在写 if x 的时候,请注意你是否表达的意思是 if x is not None。举个例子,当测试一个默认值为None的变量或者参数是否被设置为其他值的时候。这个其他值应该是在上下文中能成为bool类型false的值。

  1. 使用 is not 运算符,而不是 not … is 。虽然这两种表达式在功能上完全相同,但前者更易于阅读,所以优先考虑。

推荐:


if foo is not None

不推荐:


if not foo is None:

 

作者:吴意外
链接:https://www.jianshu.com/p/ffcc66bab3ce
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

python之PEP8规范的更多相关文章

  1. Python - 部分PEP8规范

    写代码就像写字一样,为什么有的人写的字十分漂亮,而有的人写的字过后连自己都不认识,最主要还是从一开始是否对自己严格要求.从现在开始就当自己是个初学者,把代码写漂亮点.以下截取了部分PEP8代码规范,里 ...

  2. Python 常用PEP8规范

    目录 目录 代码布局 缩进 最大行宽 空行 模块导入 字符串 表达式和语句中的空格 注释 命名规则 编程建议 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPL ...

  3. python的 pep8 规范(看完你会感谢我的!!!)

    1 缩进与换行 每级缩进使用四个空格 2 限制每行的最大长度为79个字符 3 空行 顶层函数和类之间使用两个空行 类的方法之间用一个空行 在函数中使用空行表示不同逻辑段落 4 导入位于文件的顶部 5 ...

  4. Pycharm配置autopep8让Python代码更符合pep8规范

    一.何为pep8? PEP 8官方文档 -- Style Guide for Python Code PEP8中文翻译(转) 二.Pycharm中配置pep8 Pycharm本身是有pep8风格检测的 ...

  5. Python 常用 PEP8 编码规范

    Python 常用 PEP8 编码规范 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPLE: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  6. 不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8

    不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8 简介:为什么要强调 书写规范 ?这其实并不关乎"美丑",而是为了 更高的效率(代码阅读.开发.维护 ...

  7. PEP8 规范

    Python PEP8 编码规范中文版   原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 Title Style ...

  8. 【转】PEP8 规范

    [转]PEP8 规范 Python PEP8 编码规范中文版   原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 ...

  9. CHENGDU1-Python编程语言和PEP8规范

    CHENGDU1-Python编程语言和PEP8规范 PEP8规范6条? 答:PEP8规范说白了就是一种规范,可以遵守,也可以不遵守,遵守PEP8可以让代码的可读性更高. 代码编排:---缩进,4个空 ...

随机推荐

  1. Android dump命令查看某个apk是被谁安装的?

    adb shell dumpsys package packages > packageAll.txt     ORadb shell pm dump packages > package ...

  2. springMVC和struts2有什么不同?为什么要用springMVC或者struts2?让你实现一个MVC框架大概如何设计?

    [问题一:不同] (1)框架机制 1.Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用S ...

  3. EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解

    背景需求 EasyNVR的使用者应该都清楚的了解到,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理可以 ...

  4. [LeetCode] 264. Ugly Number II 丑陋数 II

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  5. 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  6. burpsuite证书生成和导入

    官网下载个社区版,基本还是够用的 配置代理的ip和port,选择根证书生成方式 访问配置的ip:port,下载证书 双击下载的证书,导入keychain 打开keychain,信任根证书 再次使用bu ...

  7. Procedural Mesh Component in C++:Getting Started

    转自:https://wiki.unrealengine.com/Procedural_Mesh_Component_in_C++:Getting_Started I create a simple ...

  8. VS 2015main函数带参数的调试

    最近学习pcl,学习C++,今天让main的参数接收数据,想起没用过这样的,不知道怎么在vs里面调试 因此找了下方法,并记录下来 代码 #include<iostream> int mai ...

  9. Django实现博客项目

    一.项目概述 项目运行环境 Python3.6+ Django 1.11 MySQL 5.7 其他插件(图片处理.分页.验证码....) 项目详细功能介绍 前台功能 项目首页展示 轮播图 博客推荐 最 ...

  10. Jetson TX2

    NVIDIA Jetson TX2作为一个嵌入式平台的深度学习端,具备不错的GPU性能,可以发现TX2的GPU的计算能力是6.2.这意味着TX2对半精度运算有着良好的支持,因此,完全可以在桌面端训练好 ...