K.I.S.S---Keep IT Simple,Stupid!    人生苦短,我用Python

PEP8 编程规范

  • 名称:PEP8 Python编程规范
  • 分类:Python入门
  • 标签:
  • 时间:
  • 地址:https://peps.python.org/pep-0008/
  • 简介:
    PEP8 是什么呢,简单说就是一种编码规范,是为了让代码“更好看”,更容易被阅读。 具体有这些规范,参考 PEP 8 --Style Guide for Python Code.当然也可以使用Pycharm检查或使用pylint.

详情:

如果你还不知道PEP8是什么,可能还算不上一位合格的Python程序员,PEP8是每个Python程序员必读的提案,Python虽然以简洁地的语法著称,但是并不意味着你就一定能写出简洁优雅的代码,PEP8风格指南定义了编写 Python 代码的规范和应该遵守的编码原则,我们在在编写代码的过程中都应该按照此规范约束我们的代码。每个开发者都应该多读几遍,做到了然于心。网上有各种版本的中译版,可选择性参考阅读。

 

推荐一个GITHUB上高赞的项目,Python 代码格式化工具Black:https://www.python1989.com/python-open-souce-project/python-%E4%BB%A3%E7%A0%81%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%B7%A5%E5%85%B7black/

 

PEP 8 是 Python 的官方编码风格指南,旨在提高代码的可读性和一致性。它定义了一系列代码书写和组织的规范,帮助 Python 开发者编写易于阅读和维护的代码。以下是 PEP 8 的主要内容:

1. 代码布局

  • 缩进:使用四个空格进行缩进,不要使用制表符(tab)。一律统一使用空格。
  • 行长:每行代码的长度不应超过 79 个字符,以保持代码的可读性。在长函数或逻辑行中,可以使用反斜杠(\)进行换行。
  • 空行:函数和类定义之间要用两个空行分隔。方法定义之间用一个空行分隔。

2. 导入

  • 导入顺序:导入应分为三部分:标准库导入、第三方库导入和本地应用导入。各部分之间用空行分隔。
  • 导入格式:尽量避免使用 from module import * 形式的导入,以免引入不必要的命名冲突。应使用 import module 形式。

3. 空格

  • 操作符:二元操作符(如 +, -, *, /, =)前后应有一个空格,但不在括号内的参数列表、索引或切片周围添加空格。
  • 逗号、分号和冒号:逗号、分号和冒号后面应加一个空格,但不在它们前面添加空格。

4. 命名规范

  • 变量名和函数名:使用小写字母,单词之间用下划线分隔(如 variable_name, function_name)。
  • 类名:使用驼峰命名法(如 ClassName),每个单词首字母大写。
  • 常量:使用全大写字母和下划线分隔(如 CONSTANT_NAME)。

5. 字符串

  • 引号:建议使用单引号(')来定义字符串,但若字符串中包含单引号,则使用双引号("),反之亦然。保持一致性。
  • 字符串拼接:应避免使用 + 操作符连接长字符串,改用括号内换行的方式。

6. 注释

  • 块注释:块注释用 # 符号开头,并与代码保持一致的缩进级别。块注释应与被注释的代码用两个空行分隔。
  • 行注释:行注释应在代码行的右侧,并至少与代码保持两个空格的距离。

7. 文档字符串

  • 函数和类的文档字符串:函数和类应有文档字符串,描述其功能、参数和返回值。文档字符串应使用三重引号(""")包围。

8. 异常

  • 捕获异常:应明确捕获特定异常,而不是使用裸露的 except:。如需捕获所有异常,可以使用 except Exception:

9. 函数和方法

  • 参数和返回值:函数和方法的参数和返回值应清晰地说明。尽量保持函数的单一职责。

10. 编程建议

  • 可读性:优先考虑代码的可读性,写出清晰易懂的代码,而不是仅仅为了简短而牺牲可读性。
  • 简洁性:避免过于复杂的语法和逻辑。简单明了的代码更易于维护。

总结

PEP 8 提供了全面的编码规范,帮助 Python 开发者编写一致、可读性高的代码。遵循 PEP 8 可以使代码风格一致,提高代码质量和维护性。更多详细内容可以参见官方文档 PEP 8


PEP是什么?

PEP指的是Python Enhancement Proposal,是Python社区中用于提出新特性、改进或标准的文档。PEP的目的是促进Python社区的讨论和协作,并提高Python语言的质量和一致性。

PEP文档经过Python社区的讨论和审查后,有可能成为Python的标准。 每一个Python版本的新特性或变化都是讲PEP天通过社区决策层讨论,投票议决,通过后才有我们看到的功能变化。Guido van Rossum 被称为 仁慈的独裁者,他会亲自签署并确认每一份PEP。一些广为人知的PEP包括PEP 8,它定义了Python编码风格的指南,以及PEP 20,它总结了Python语言的哲学和设计原则,也被称为“Zen of Python”。

PEP的官网是:https://www.python.org/dev/peps/,这也就是PEP 0 的地址。其它PEP的地址是将编号拼接在后面,例如:https://www.python.org/dev/pe... 就是PEP 20 的链接,以此类推。

第一个PEP诞生于2000年

官方将PEP分成三类:

I - Informational PEP

P - Process PEP

S - Standards Track PEP

其含义如下:

信息类:这类PEP就是提供信息,有告知类信息,也有指导类信息等等。例如PEP 20(The Zen of Python,即著名的Python之禅)、PEP 404 (Python 2.8 Un-release Schedule,即宣告不会有Python2.8版本)。

流程类:这类PEP主要是Python本身之外的周边信息。例如PEP 1(PEP Purpose and Guidelines,即关于PEP的指南)、PEP 347(Migrating the Python CVS to Subversion,即关于迁移Python代码仓)。

标准类:这类PEP主要描述了Python的新功能和新实践(implementation),是数量最多的提案。例如我之前推文《详解Python拼接字符串的七种方式》提到过的f-string方式,它出自PEP 498(Literal String Interpolation,字面字符串插值)。

每个PEP最初都是一个草案(Draft),随后会经历一个过程,因此也就出现了不同的状态。

在PEP 0(Index of Python Enhancement Proposals (PEPs))里,官方列举了所有的PEP,你可以按序号、按类型以及按状态进行检索。而在PEP 1(PEP Purpose and Guidelines)里,官方详细说明了PEP的意图、如何提交PEP、如何修复和更新PEP、以及PEP评审的机制等等。

为什么要读PEP?

无论你是刚入门Python的小白、有一定经验的从业人员,还是资深的黑客,都应该阅读Python增强提案。

依我之见,阅读PEP至少有如下好处:

(1)了解Python有哪些特性,它们与其它语言特性的差异,为什么要设计这些特性,是怎么设计的,怎样更好地运用它们;

(2)跟进社区动态,获知业内的最佳实践方案,调整学习方向,改进工作业务的内容;

(3)参与热点议题讨论,或者提交新的PEP,为Python社区贡献力量。

说到底,学会用Python编程,只是掌握了皮毛。PEP提案是深入了解Python的途径,是真正掌握Python语言的一把钥匙,也是得心应手使用Python的一本指南。

哪些PEP是必读的?

如前所述,PEP提案已经累积产生了478个,我们并不需要对每个PEP都熟知,没有必要。下面,我列举了一些PEP,推荐大家一读:

PEP 0 -- Index of Python Enhancement Proposals
PEP 7 -- Style Guide for C Code,C扩展
PEP 8 -- Style Guide for Python Code,Python编码规范(必读)
PEP 20 -- The Zen of Python,Python之禅
PEP 202 -- List Comprehensions,列表生成式
PEP 274 -- Dict Comprehensions,字典生成式
PEP 234 -- Iterators,迭代器
PEP 257 -- Docstring Conventions,文档注释规范
PEP 279 -- The enumerate() built-in function,enumerate枚举
PEP 282 -- A Logging System,日志模块
PEP 285 -- Adding a bool type,布尔值(建议阅读《Python对象的身份迷思:从全体公民到万物皆数》)
PEP 289 -- Generator Expressions,生成器表达式
PEP 318 -- Decorators for Functions and Methods,装饰器
PEP 342 -- Coroutines via Enhanced Generators,协程
PEP 343 -- The "with" Statement,with语句
PEP 380 -- Syntax for Delegating to a Subgenerator,yield from语法
PEP 405 -- Python Virtual Environments,虚拟环境
PEP 471 -- os.scandir() function,遍历目录
PEP 484 -- Type Hints,类型约束
PEP 492 -- Coroutines with async and await syntax,async/await语法
PEP 498 -- Literal String Interpolation Python,字面字符串插值
PEP 525 -- Asynchronous Generators,异步生成器
PEP 572 -- Assignment Expressions,表达式内赋值(最具争议)
PEP 3105 -- Make print a function,print改为函数
PEP 3115 -- Metaclasses in Python 3000,元类
PEP 3120 -- Using UTF-8 as the default source encoding,默认UTF-8
PEP 3333 -- Python Web Server Gateway Interface v1.0.1,Web开发
PEP 8000 -- Python Language Governance Proposal Overview,GvR老爹推出决策层后,事关新决策方案

 

对PEP的贡献

虽无确切数据作证,我国Python开发者的数量应该比任何国家都多。然而,纵观PEP 0 里面列举的200多个PEP作者,我只看到了一个像是汉语拼音的国人名字(不排除看漏,或者使用了英文名的)。反差真是太大了。

我特别希望,国内的Python黑客们的名字,能越来越多地出现在那个列表里,出现在Python核心开发者的列表里。

此外,关于对PEP的贡献,还有一种很有效的方式,就是将PEP翻译成中文,造福国内的Python学习社区。

 



注:当前文章会不定期进行更新。如果您对本文有更好的建议,有新资料推荐, 可以点击: 欢迎分享优秀网站
这个位置将来会放广告

我想等网站访问量多了,在这个位置放个广告。网站纯公益,但是用爱发电服务器也要钱啊 ----------狂奔的小蜗牛