title: Python pep8代码规范

tags: Python

介绍(Introduction)

官方文档:PEP 8 -- Style Guide for Python Code

很多的项目都有自己的代码规范,如果和自己的项目冲突,优先按照自己项目的规范。

保持盲目的一致是头脑简单的表现(A Foolish Consistency Is The Hobgoblin Of Little Minds)

代码风格(Code lay-out)

缩进(Indentation)

采用4个空格进行缩进,对于续行来说,4空格的规则可以不遵守。

续行有两种方式:隐式续行,悬挂续行。隐式续行是垂直对齐于圆括号、方括号和花括号。

悬挂续行注意两点:第一行不包含参数,在续行中要再缩进一级

YES

# 同开始分界符(左括号)对齐
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)

NO

# 采用垂直对齐时第一行不应该有参数
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)

多行if语句

如果if语句太长,需要用多行书写,2个字符(例如,if)加上一个空格和一个左括号刚好是4空格的缩进,但这对多行条件语句的续行是没用的。因为这会和if语句中嵌套的其他的缩进的语句产生视觉上的冲突。这份PEP中并没有做出明确的说明应该怎样来区分条件语句和if语句中所嵌套的语句。以下几种方法都是可行的,但不仅仅只限于这几种方法:

# 不采用额外缩进
if (this_is_one_thing and
that_is_another_thing):
do_something() # 增加一行注释,在编辑器中显示时能有所区分
# supporting syntax highlighting.
if (this_is_one_thing and
that_is_another_thing):
# Since both conditions are true, we can frobnicate.
do_something() # 在条件语句的续行增加一级缩进
if (this_is_one_thing
and that_is_another_thing):
do_something()

多行结束右圆/方/花括号可以单独一行书写,和上一行的缩进对齐:

自己换行的时候,习惯于右括号在做左侧

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',
)

Tab还是空格?(Tab Or Space?)

推荐使用空格缩进,Python3不允许table和space混合使用

每行最大长度(Maximum Line Length)

每行最多79个字符,

对于连续大段的文字(比如文档字符串(docstring)或注释),其结构上的限制更少,这些行应该被限制在72个字符长度内。

限制宽度是为了更好的进行代码review

一些团队会强烈希望行长度比79个字符更长。当代码仅仅只由一个团队维护时,可以达成一致让行长度增加到80到100字符(实际上最大行长是99字符),注释和文档字符串仍然是以72字符换行。

推荐使用圆括号、方括号、花括号的隐式续行,长行最好加上反斜杠区别续行

with open('/path/to/some/file/you/want/to/read') as file_1, \
open('/path/to/some/file/being/written', 'w') as file_2:
file_2.write(file_1.read())

空行(Blank Line)

用两个空行隔离function和类

使用1个空行来分隔类中的方法(method)定义。

在函数内(尽量少地)使用空行使代码逻辑更清晰。

Imports

Imports应该分行写,而不是都写在一行

# 分开写
import os
import sys
# 不要像下面一样写在一行
import sys, os

这样写也是可以的:

from subprocess import Popen, PIPE

Imports应该写在代码文件的开头,位于模块(module)注释和文档字符串之后,模块全局变量(globals)和常量(constants)声明之前。

mports应该按照下面的顺序分组来写:

  • 标准库imports
  • 相关第三方imports
  • 本地应用/库的特定imports

导入的时候推荐使用绝对路径导入,这样会更加清晰

变量

  • 常量:大写+下划线

    USER_CONSTANT 对于不会发生改变的全局变量,使用大写加下划线
  • 私有变量 : 小写和一个前导下划线

    _private_value

函数和方法

总体而言应该使用,小写和下划线

参考:

类使用驼峰式的命名,所有单词首字母大写其余字母小写

如:MimeTypes

对于基类而言,可以使用一个 Base 或者 Abstract 前缀

BaseCookie

AbstractGroup

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

http://nanshu.wang/post/2015-07-04/

http://lmmsoft.github.io/blog/2012/01/23/python-代码风格pep8/

Python pep8代码规范的更多相关文章

  1. python PEP8代码规范及问题

    最近刚刚接触Python,为了养成好习惯,尽量保证自己写的代码符合PEP8代码规范,下面是过程中报出的警告及解决方法,英文有些翻译不太准确见谅,会不断更新: PEP 8: module level i ...

  2. python之代码规范

    第一章 为什么要有规范化目录 真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码 软件开发,规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰,合理开发. 1.代码 ...

  3. 【翻译】Python PEP8编码规范(中文版)

    原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 Title Style Guide for Python Code ...

  4. Python PEP8代码书写规范

    摘自: 规范 https://blog.csdn.net/ratsniper/article/details/78954852

  5. python的PEP8代码规范

    一.缩进:每级缩进用4个空格.如果缩进不正确或缩进格式不统一,一般错误信息会明确告诉你,但有时也会出现invalid syntax报错.所谓缩进不正确,python的缩进是四个空格或一个TAB,如果缩 ...

  6. python PEP8常用规范

    python 常用PEP8规范   一 代码编排 1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号 ...

  7. python PEP8常用规范(看完你会感谢我的!)

    完整的规范移步传送门 pep8规范 官方文档:[https://www.python.org/dev/peps/pep-0008/](https://www.python.org/dev/peps/p ...

  8. [python]pep8编码规范

    一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车.3 类 ...

  9. Python PEP8 编码规范中文版

    原文链接:https://legacy.python.org/dev/peps/pep-0008/ 参考:https://blog.csdn.net/ratsniper/article/details ...

随机推荐

  1. bzoj1227: [SDOI2009]虔诚的墓主人(树状数组,组合数)

    传送门 首先,对于每一块墓地,如果上下左右各有$a,b,c,d$棵树,那么总的虔诚度就是$C_k^a*C_k^b*C_k^c*C_k^d$ 那么我们先把所有的点都给离散,然后按$x$为第一关键字,$y ...

  2. docker默认存储空间用完情况下,做迁移数据

    由于docker默认存放数据路径为/var/lib/docker,但运行了一段时间后,发现/var/lib/docker下的目录文件过大,导致此分区空间不够用.通过以下方法,解决该问题. 如何避免: ...

  3. Pycharm自动部署项目

    Pycharm自动部署项目 大家好呀,又有几天不见各位了.断更了几天,给大家说声抱歉.清明节大家都挺忙的,有扫墓祭祖的,也有趁小长假去游玩的. 所以,在节后,更新也会照常进行,继续给大家分享本人的一些 ...

  4. JIRA reference

    Workflow https://confluence.atlassian.com/adminjiracloud/configuring-workflow-schemes-776636598.html ...

  5. 在谷歌地图上绘制行政区域轮廓【结合高德地图的API】

    实现思路: 1.利用高德地图行政区域API获得坐标列表 2.将坐标列表绘制在谷歌地图上[因为高德地图和国内的谷歌地图都是采用GCJ02坐标系,所有误差很小,可以不进行坐标误差转换] 注意点: 1.用百 ...

  6. ajax异步请求问题

    今天在使用异步请求删除图片时,想在页面测试是不是有效果,使用halt完全没反应,我以为是AJAX请求地址有问题,没有请求到这个方法中,但是在控制台中network的请求地址是正常的,后来反应过来了,异 ...

  7. 简单使用phpspider采集本博客文章内容

    采集流程 根据链接获取页面内容(curl)->获取需要采集的内容(可以通过正则.xpath.css选择器等方法进行筛选) <?php require_once 'phpspider/aut ...

  8. CentOS6.5安装MySQL5.7(也适合其他版本安装)

     1.查看是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步使用yum安装时会报错: 方法一:yum list installed | grep mysql 方法二:rpm -qa | ...

  9. Python 起步 环境配置

    1:https://www.python.org/   首先进入这个网址,选择自己喜欢的版本 2:嘛,我以前装的是2.7,把下载好的安装一下就行  3:我的电脑Python的安装路径C:\Progra ...

  10. Restful 3 -- 序列化组件(GET/PUT/DELETE接口设计)、视图优化组件

    一.序列化组件 基于上篇随笔的表结构,通过序列化组件的ModelSerializer设计如下三个接口: GET 127.0.0.1:8000/books/{id} # 获取一条数据,返回值:{} PU ...