学Python,怎能不懂点PEP?
PEP是Python增强提案(Python Enhancement Proposal)的缩写。社区通过PEP来给Python语言建言献策,每个版本的新特性和变化都是通过PEP提案经过社区决策层讨论、投票决议,最终确定的。
也就是说,PEP是各种增强功能和新特性的技术规格,也是社区指出问题、精确化技术文档、推动Python发展的提案。一般情况下,可以将PEP视为Python语言的设计文档,包含了技术规范和功能的基本原理说明等。
分类
官方将PEP分成三类:
-
I - Informational PEP:信息类,说明 Python 中的某一个设计问题,指导方针、共识,发布日程等内容。例如PEP 20(The Zen of Python,即著名的Python之禅)、PEP 404 (Python 2.8 Un-release Schedule,即宣告不会有Python2.8版本)。
-
P - Process PEP:流程类,Python 本身之外的周边信息,开发中使用的工具、流程或者环境的更改说明。PEP 1(PEP Purpose and Guidelines,即关于PEP的指南)、PEP 347(Migrating the Python CVS to Subversion,即关于迁移Python代码仓)。
-
S - Standards Track PEP:标准类,数量最多的提案,描述Python的新功能和新实践。
读Python源代码可以帮助你了解Python的当前的处理逻辑,读PEP文档可以帮助你了解Python设计的来龙去脉,了解Python有哪些特性,为什么没有某些特性,Python与其它语言特性的差异,为什么要设计这些特性,是怎么设计的,怎样更好地运用它们。
说到底,PEP是深入了解Python的途径,是真正掌握Python语言的一把钥匙,也是得心应手使用Python的一本指南。
PEP阅读建议
PEP从2000年开始到目前已经发布了几百个,所有PEP都存在一个github repository仓库中,PEP索引及分类汇总在PEP 0 — Index of Python Enhancement Proposals (PEPs),其中有一些对我们理解和使用python非常重要,推荐大家一读:
- PEP 20 – The Zen of Python: 应该始终践行的python之禅,python命令行输入“import this”。
-
PEP 8 – Style Guide for Python Code: Python代码规范和应该遵守的编码原则,Python编码风格指南,必读。
-
PEP 257 – Docstring Conventions: 文档注释规范,提高代码的可维护性。
-
PEP 287 – reStructuredText Docstring Format: 使用 reStructuredText 标记语言编写带格式的复杂文档。
-
PEP 3333 — Python Web Server Gateway Interface v1.0.1: 更新版WSGI协议,告诉你如何在web服务器与web应用/web框架之间交互的可移植标准接口。
Python 2
Python 2 版本重点关注以下PEP:
-
PEP 201 – Lockstep Iteration (zip function) (2.0)
-
PEP 202 – List Comprehensions (2.0) - 列表生成式
-
PEP 221 – Import As (2.0)
-
PEP 234 – Iterators (2.1) - 迭代器
-
PEP 236 – Back to the __future__ (2.1) - 回到未来,把下一个新版本的特性导入到当前版本
-
PEP 255 – Simple Generators (yield) (2.2) - 生成器
-
PEP 279 – The enumerate() built-in function (2.3) - 枚举方法
-
PEP 282 – A Logging System (2.3) - 日志模块
-
PEP 285 – Adding a bool type (2.3) - 布尔型
-
PEP 289 – Generator Expressions (2.4) - 生成器表达式
-
PEP 308 – Conditional Expressions (2.4) - Python 的三元式: X if C else Y
-
PEP 318 – Decorators for Functions and Methods (2.4) - 装饰器
-
PEP 322 – Reverse Iteration (2.4) - 反向迭代
-
PEP 324 – subprocess - New process module (2.4)
-
PEP 327 – Decimal Data Type (2.4) - 小数点精确计算
-
PEP 341 – Unifying try-except and try-finally - try … except … else … finally ...
-
PEP 342 – Coroutines via Enhanced Generators (2.5) - 协程
-
PEP 343 – The “with” Statement (2.5) - with语句
-
PEP 367 – New Super (2.6) - super调用
Python 2 and 3
-
PEP 274 – Dict Comprehensions (originally 2.3, then 2.7 and 3.0) - 字典表达式
-
PEP 372 – Adding an ordered dictionary to collections (2.7, 3.1) - 有序字典
-
PEP 389 – argparse - New Command Line Parsing Module (2.7, 3.2) - 命令行参数解析模块
Python 3
Python 3 重点:
-
PEP 380 – Syntax for Delegating to a Subgenerator (yield from) (3.3) - 引入“yield from”语法
-
PEP 405 – Python Virtual Environments (3.3) - 虚拟环境
-
PEP 435 – Adding an Enum type to the Python standard library (3.4) - 引入枚举类型
-
PEP 484 - Type Hints (3.5) - 类型约束
-
PEP 485 – A Function for testing approximate equality (3.5) - 约等于
-
PEP 492 – Coroutines with async and await syntax (3.5) - 协程引入async/await语法
-
PEP 525 – Asynchronous Generators (3.6) - 异步生成器
-
PEP 526 – Syntax for Variable Annotations (3.6) - 变量声明
-
PEP 530 – Asynchronous Comprehensions (3.6) - 异步表达式 asynchronous versions of list, set, dict comprehensions and generator expressions
-
PEP 3101 – Advanced String Formatting (3.0) - 新的字符串格式化方法
-
PEP 3105 – Make print a function (3.0) - 为什么Python3要把print改为函数
-
PEP 3107 – Function Annotations (3.0)
-
PEP 3115 – Metaclasses in Python 3000 (3.0)
-
PEP 3119 – Introducing Abstract Base Classes (3000) - 抽象基类
-
PEP 3120 – Using UTF-8 as the default source encoding (3.0)
-
PEP 3129 – Class Decorators (3.0)
-
PEP 3135 – New Super (3.0) - PEP 367 for Python 3.X
-
PEP 3148 – futures - execute computations asynchronously (3.2) - futures的详细介绍
-
PEP 3156 – Asynchronous IO Support Rebooted: the “asyncio” Module (3.3) - 异步IO
参考
-
PEP 0 — Index of Python Enhancement Proposals (PEPs): https://www.python.org/dev/peps/
-
PEP Git Repository: https://github.com/python/peps