目录

简介

文件编码

代码布局

导入库函数

缩进

行长度

空行

字符串

表达式和语句中的空白

避免空格

其他

注释

块注释

行注释

文档字符串

函数注释

命名规范

采用描述性的命名规则

类的命名采用驼峰命名法

避免使用的名称

软件包/模块名称

函数名称

函数/方法参数

常量

编程建议

字符串

布尔判断

函数

异常


简介

PEP 8 Style Guide for Python Code,即Python代码样式指南,或者说python编码规范。本文对文档进行了筛选与汉化,由于并不是完全复制到百度或谷歌进行翻译(这样也没啥意思),所以并不全,目录也根据个人理解(尽量从python文件的上方到下方)有所改变,英文好的可以直接看官网。红色的是个人认为应该遵守的,其余的看习惯吧。

文件编码

核心Python发行版中的代码应该始终使用UTF-8(Python 2中使用ASCII)。

代码布局

导入库函数

导入始终放在文件顶部,紧随任何模块之后 注释和文档字符串,以及模块全局变量和常量之前。

导入应按以下顺序进行:

  1. 标准库导入
  2. 有关的第三方库进口
  3. 本地应用程序/库特定的导入

若是导入多个库函数,应该分开依次导入:

import os
import sys

应避免使用通配符导入(from xxx import *)

缩进

每个缩进级别4个空格,建议使用IDE自带的,比如Pycharm。建议不使用制表符(Tab),不要混用制表符和空格!!!

行长度

每行最大长度79字符,换行可以使用反斜杠,最好使用圆括号,IDE中一般Enter会自动添加。

文档字符串或注释,行长应限制为72 字符。

一般过长,IDE会提示。

有二元操作符时应在操作符前换行

# Correct:
# easy to match operators with operands
income = (gross_wages+ taxable_interest+ (dividends - qualified_dividends)- ira_deduction- student_loan_interest)
# Wrong:
# operators sit far away from their operands
income = (gross_wages +taxable_interest +(dividends - qualified_dividends) -ira_deduction -student_loan_interest)

空行

用两个空白行分隔顶层函数和类定义。
用一个空行分隔类中的方法定义。
可以使用额外的空白行(节省空间)来分隔相关功能组。在一堆相关的单行程序(例如,一组虚拟执行程序)之间可能会省略空白行。
在函数中使用空行来节省逻辑部分。
恰当的使用空白行可以提高代码的可读性。

字符串

在Python中,单引号字符串和双引号字符串是相同的。PEP没有对此做建议。个人建议使用双引号来包含长度大于1的字符串,使用单引号来包含长度为1的字符串,与其他语言一致(博主用Python一段时间,等用C++时有时就对字符串使用单引号,然后出错)。如果字符串中存在单引号或双引号,字符串可使用另一个来包含,尽量避免转义(反斜杠)。

表达式和语句中的空白

避免空格

在以下情况下避免无关的空格

在括号或大括号内

# Correct:
spam(ham[1], {eggs: 2})
# Wrong:
spam( ham[ 1 ], { eggs: 2 } )

在尾随逗号和后面的右括号之间

# Correct:
foo = (0,)
# Wrong:
bar = (0, )

在逗号,分号或冒号前面

# Correct:
if x == 4: print x, y; x, y = y, x
# Wrong:
if x == 4 : print x , y ; x , y = y , x

紧接在开始函数调用的参数列表的开括号之前

# Correct:
spam(1)
# Wrong:
spam (1)

紧接在开始括号之前,开始索引或切片

# Correct:
dct['key'] = lst[index]
# Wrong:
dct ['key'] = lst [index]

在一个赋值(或其他)运算符周围用多于一个的空格来对齐它

# Correct:
x = 1
y = 2
long_variable = 3
# Wrong:
x             = 1
y             = 2
long_variable = 3

其他

避免在任何地方尾随空格

总是围绕这些二元运算符在两侧使用一个空格

=

+=, -=,*=, /=

==, <, >, !=, <>, <=, >=, in, not in, is, is not

and, or, not

如果使用优先级不同的运算符,请考虑添加优先级最低的运算符周围的空白,有括号时可考虑括号外添加。

# Correct:
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
# Wrong:
i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)

函数注释应使用冒号和空格,如果存在->,->两侧应该有空格

# Correct:
def munge(input: AnyStr): ...
def munge() -> PosInt: ...
# Wrong:
def munge(input:AnyStr): ...
def munge()->PosInt: ...

表示关键字参数或默认值时不必添加空格

# Correct:
def complex(real, imag=0.0):return magic(r=real, i=imag)
# Wrong:
def complex(real, imag = 0.0):return magic(r = real, i = imag)

注释

代码更改时,相应的注释也要随之更改

块注释

通常由一个或多个段落组成完整的句子,每个句子以句号结尾

行注释

行注释用#和一个空格开始,一般在代码的上一行,如果代码较短,又很重要,可以与代码一行,建议与代码空两个空格

flag = true  # set flag to true, so there is no border problem

文档字符串

常用三个双引号作文档字符串,文档字符串常用在模块的开端用以说明模块的基本功能,或紧跟函数定义的后面用以说明函数的基本功能,参数,返回值。

函数注释

第一行说明函数的作用,接下来是函数的参数、函数的返回值。pycharm中函数后打三双引号即可自动添加。

def plus(a,b):"""compute a+b and return result:param a: int, a number:param b: int, another number:return: int, a+b"""

命名规范

采用描述性的命名规则

例如一个实现某种功能的类或函数,那这个类或函数的名字就以相应的功能实现作为命名,简单易懂。

类的命名采用驼峰命名法

每个单词的首字母大写。由于python官方还存在tuple、SystemExit等混用的情况,个人认为这里暂时没必要。

避免使用的名称

切勿将字符’l’(小写字母el),’O’(大写字母oh)或’I’(大写字母i)作为单个字符变量名称。在一些字体中,这些字符与数字1和零是无法区分的。当试图使用“l”时,请使用“L”。

软件包/模块名称

建议使用简短的全小写名称,不建议特别长,实在不行就使用下划线。

函数名称

应该是小写的,为了提高可读性,必须使用由下划线分隔的单词。如果函数参数的名称与保留关键字冲突,通常最好追加一个尾部下划线,而不是使用缩写或拼写损坏。

函数/方法参数

始终将 self 作为实例方法的第一个参数。

始终 使用 cls 作为类方法的第一个参数 。

常量

常量通常在模块级别定义,并全部写入带下划线的大写字母。 例子包括 MAX_OVERFLOW 和 TOTAL 。

编程建议

字符串

不建议使用+进行字符串连接,这个的优化不好。建议使用''.join()。

使用startwith/endwith判断前后缀,而不是==与切片[]

# Correct:
if foo.startswith('bar'):
# Wrong:
if foo[:3] == 'bar':

布尔判断

与单例(例如,None)比较,请使用is 或者 is not进行判断,而不是==。内部区别是使用id还是__eq__,__eq__可覆盖。

# Correct:
if foo is not None:
# Wrong:
if foo == None:

不要在条件语句中使用==比较bool值和True或False

# Correct:
if greeting:
# Wrong:
if greeting == True:

函数

没有用到self的方法放到类外作为函数。

确保每个return语句都能有返回值,不能返回的应显式的返回None。

# Correct:def foo(x):if x >= 0:return math.sqrt(x)else:return Nonedef bar(x):if x < 0:return Nonereturn math.sqrt(x)
# Wrong:def foo(x):if x >= 0:return math.sqrt(x)def bar(x):if x < 0:returnreturn math.sqrt(x)

异常

从Exception派生,而不是BaseException。

try语句中尽量包含更少的代码,避免掩盖错误。

# Correct:
try:value = collection[key]
except KeyError:return key_not_found(key)
else:return handle_value(value)
# Wrong:
try:# Too broad!return handle_value(collection[key])
except KeyError:# Will also catch KeyError raised by handle_value()return key_not_found(key)

更多python相关内容:【python总结】python学习框架梳理

本人b站账号:lady_killer9

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

Python-Python编码规范(PEP8)相关推荐

  1. 【Python从入门到精通】(三)Python的编码规范,标识符知多少?

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 这是Pyhon系列文章的第三篇,本文主要介绍Python程序的编码规范. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题及需要,欢迎踊跃 ...

  2. Python学习笔记 Python概述 编码规范 输出与输入 变量 标识符

    Python学习第一天 Python的概述 1.Python的优缺点 1.1 优点: 1.2 缺点: 2.Python的编码规范 3.注释 3.Python的输出与输入 4.Python中的变量 5. ...

  3. Python的编码规范

    Python的编码规范 一.前言 二.应该严格遵守的条目 一.前言   Python中采用PEP 8 作为编码规范,其中PEP是Python Enhancement Proposal的缩写,翻译过来是 ...

  4. Python 编码规范 PEP8

    PEP8 编码规范 极客点儿 2020-08-03 PEP8 是 Python 的一套官方定义的编码规范,可从官方文档中查看详细的内容https://www.python.org/dev/peps/p ...

  5. python 编码规范 PEP8整理

    我是用Python的IDE:pycharm来编写Python代码的,用IDE编写代码有一个好处就是语法高亮,智能提示.Python的代码样式规范称之为PEP 8规范,每次编写代码如果有出现不符合PEP ...

  6. 浅谈Python代码风格规范 PEP8

    浅谈Python PEP8 本文只简要谈及一下,python的编码风格指南-PEP8. PEP8 全称<Python Enhancement Proposal #8>译作:8号Python ...

  7. Python的编码规范(超详细)

    目录 一.前言 二.编写规范 三.命名规范 四.结语 一.前言 编码的规范性对代码的整体展现有着较大的影响. 先让我们看两张规范与不规范的代码截图来感受下. 先让我们看看不规范的吧. 看完有什么感觉吗 ...

  8. python基础编码规范_Python语言的基本语法和编码规范.doc

    Python 语言的基本语法和编码规范 Python 编程教程教师 : 工作 :Python 语言的基本语法和编码标 准课程描述本章将介绍 Python 语言的基本语法和编码标准,重点介 绍 Pyth ...

  9. Python编码规范PEP8

    Python采用PEP8(Python Enhancement Proposal 8,Python增强建议书第8版): 1.缩进:每个语句块使用4个空格(尽可能不使用Tab键)作为缩进量. 2.每行代 ...

  10. Python 编码规范(pep8)

最新文章

  1. OpenGL书和资源
  2. libsvm 使用介绍
  3. STM32 备份寄存器操作
  4. Hive之DDL数据操作
  5. 北京航空航天大学计算机专业培养方案,北京航空航天大学计算机科学与技术专业...
  6. linux系统修改时区开发板,Linux系统时区时间修改
  7. php用wordanalysis抓取姓名_利用vba查询/抓取 外部数据
  8. 判断Javascript变量类型的函数
  9. FlinkCdc从Mysql指定的binlog日志offsetPos位置开始读取数据
  10. 判断display为隐藏还是显示及获取css
  11. 基于Linux的USB主/从设备之间的三种通信方式-转
  12. Unity 3D开发-C#脚本语言的一些基础用法
  13. JavaScript高级教程(面向对象编程)
  14. GeoServer发布矢量地图服务
  15. 计算机认知矫正治疗游戏,CCRT认知矫正系统_计算机认知矫正系统_认知行为矫正治疗系统-3618医疗器械网...
  16. 基于nodejs的excel表格合并工具
  17. matlab中设置不同的点的形状,matlab点的形状
  18. 2021Java最新技术发展趋势
  19. 最简单的平面制图用什么软件_视频解说不想自己录,用什么简单好用的配音软件制作?...
  20. [系统安装] 装机员U盘安装原版系统

热门文章

  1. upload靶场第一-二十一关
  2. canary-金丝雀
  3. 台湾清华大学概率论笔记一 导论
  4. 用python写个桌面挂件 | 手把手带大家做只桌面宠物
  5. 分布式监控平台-Zabbix
  6. [苹果开发者账号]05 换收款的银行账号
  7. b站材料3-教学目录参考
  8. apple pencil一代的平替有哪些品牌?平价电容笔推荐
  9. 树莓派4B 寄存器基地址查询
  10. nginx安全下载模块ngx_http_secure_link_module