学习 Python,怎能不懂点PEP 呢?
目前,国内各类教程不可胜数,虽然或多或少会提及 PEP,但笼统者多、局限于某个 PEP 者多,能够详细而全面地介绍 PEP 的文章并不多。
本文的目的是:尽量全面地介绍 PEP 是什么,告诉大家为什么要去阅读 PEP,以及列举了一些我认为是必读的 PEP,最后,则是搜罗了几篇 PEP 的中文翻译,希望能为 Python 学习资料的汉化,做点抛砖引玉的贡献。
PS:另外很多人在学习Python的过程中,往往因为没人指导或者系统的教程从而导致自己容易放弃,为此我建了个Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
PEP 是什么?
PEP 的全称是 Python Enhancement Proposals
,其中 Enhancement 是增强改进的意思,Proposals 则可译为提案或建议书,所以合起来,比较常见的翻译是 Python增强提案
或 Python改进建议书
。
我个人倾向于前一个翻译,因为它更贴切。Python 核心开发者主要通过邮件列表讨论问题、提议、计划等,PEP 通常是汇总了多方信息,经过了部分核心开发者 review 和认可,最终形成的正式文档,起到了对外公示的作用,所以我认为翻译成 “提案” 更恰当。
PEP 的官网是:https://www.python.org/dev/peps/,这也就是 PEP 0 的地址。其它 PEP 的地址是将编号拼接在后面,例如:https://www.python.org/dev/peps/pep-0020/ 就是 PEP 20 的链接,以此类推。
第一个 PEP 诞生于 2000 年,现在正好是 18 岁成年。到目前为止,它拥有 478 个 “兄弟姐妹”。
官方将 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),随后会经历一个过程,因此也就出现了不同的状态。以下是一个流程图:

A – Accepted (Standards Track only) or Active proposal 已接受(仅限标准跟踪)或有效提案
D – Deferred proposal 延期提案
F – Final proposal 最终提案
P – Provisional proposal 暂定提案
R – Rejected proposal 被否决的提案
S – Superseded proposal 被取代的提案
W – Withdrawn proposal 撤回提案
在 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,知乎上有两个问题,推荐大家关注:哪些 PEP 值得阅读(https://dwz.cn/7CHMBlLu),如何看待 PEP572(https://dwz.cn/L46jpzMB)。
对 PEP 的贡献
虽无确切数据作证,我国 Python 开发者的数量应该比任何国家都多。然而,纵观 PEP 0 里面列举的 200 多个 PEP 作者,我只看到了一个像是汉语拼音的国人名字(不排除看漏,或者使用了英文名的)。反差真是太大了。
我特别希望,国内的 Python 黑客们的名字,能越来越多地出现在那个列表里,出现在 Python 核心开发者的列表里。
此外,关于对 PEP 的贡献,还有一种很有效的方式,就是将 PEP 翻译成中文,造福国内的 Python 学习社区。经过一番搜索,我还没有看到系统性翻译 PEP 的项目,只找到了零星的对于某个 PEP 的翻译。
我用心搜集了几篇中文翻译成果,分享给大家:
PEP8 https://dwz.cn/W01HexFD
PEP257 https://dwz.cn/JLctlNLC
PEP328 https://dwz.cn/4vCQJpEP
PEP333 https://dwz.cn/TAXIZdzc
PEP484 https://dwz.cn/dSLZgg5B
PEP492 http://t.cn/EALeaL0
PEP541 https://dwz.cn/ce98vc27
PEP3107 http://suo.im/4xFESR
PEP3333 https://dwz.cn/si3xylgw
最后,表达一下我的私心:希望本文能给大家带来知识和见识的增长,激发一些小伙伴的学习热情,另外很多人在学习Python的过程中,往往因为没人指导或者系统的教程从而导致自己容易放弃,为此我建了个Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
学习 Python,怎能不懂点PEP 呢?的更多相关文章
- Linux运维人员如何学习python编程
Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...
- 【转】布同:如何循序渐进学习Python语言
大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...
- 零基础2018如何系统地学习python?
首先告诉你的是,零基础学习开始系统学习Python肯定难,Python的专业程度本身就不简单,学习这事本来就是一件非常煎熬的事情,人都不愿意学习,可是没办法,为了生存掌握一个技能,你必须学,如果你认真 ...
- python学习: 如何循序渐进学习Python语言
大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...
- 学习 python 编写规范 pep8 的问题笔记
决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...
- D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...
- Python学习---Python安装与基础1205
1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- 在学习python的Django\Flask\Tornado前你需要知道的,what is web?
我们都在讲web开发web开发,那到底什么是web呢? 如果你正在学习python三大主流web框架,那这些你必须要知道了 软件开发架构: C/S架构:Client/Server 客户端与服务端 ...
随机推荐
- fiddler中文乱码解决方案
只用添加一个注册表变量就行 cmd窗口执行regedit命令,在弹出的注册表编辑界面找到fiddler 右击新建一个字符传值 HeaderEncodingGBK 结果如上图右所示~ 重启fiddler ...
- 8.10-Day1T2圈(circle)
圈(circle) 题目大意 一开始看这道题,觉得有点像备用钥匙那道题,需要离散化, 把一个球的两个点分开看... 但是..其中的规律我推不出来 (不是很难,只是蒟蒻好久都没有自己独立思考了) 题解 ...
- 7_4 素数环(UVa524)<回溯法和生成-测试法的比较>
有一个环(ring)是由n个圈圈所组成的(在这里n一定是个偶数),我们想要把1到n的自然数各放到一个圈圈中,使得相邻2个圈圈中的数的和一定是素数.下图为n=6的情形.请注意:第1个圈圈中的数一定是1. ...
- bugku 域名解析题 50
什么是域名解析???? 首先我们在Windows上找到文件“C:\Windows\System32\drivers\etc\hosts” 然后找到host 双击用记事本打开然后填写上黄色区域上的东西 ...
- AcWing 872. 最大公约数
#include <iostream> #include <algorithm> using namespace std; //辗转相除法 //a和b的最大公约数 = b和(a ...
- 概率dp (背包+概率) 背包的多一点
题意:XX想抢劫银行,当危险率低于P的时候才能行动,现在给出每家银行的金钱mi和危险率pi,求最多能获得多少金钱: 题解:危险率是P,那么安全率就是1-P,那么XX抢劫的所有银行的安全率之积就不能小于 ...
- OO完结篇-第四单元小结
OO第四单元小结 一.作业架构分析. 1.第一次作业 本次作业需要完成UML类图查询. 难点在于初次接触UML,需要对UML进行一定程度的学习和理解. 思路主要是根据每个传进来的element获取其t ...
- 507,介绍一下标准的css盒子模型?低版本ie的盒子模型有什么不同的?
有两种,IE盒子模型,另外是W3C盒子模型: 盒模型都包括:内容(content),填充(padding),边界(margin),边框(border): 区别:IE的content部分吧border和 ...
- dbGet net trace instant pin
proc rn { net_name } {puts " "puts "Net name : $net_name : "set name_rule [dbget ...
- Springmvc-crud-01错误
错误:无法显示图书列表内容 原因:获取存储域对象中的名字写错了 controller层: 前端页面: 解决方案:前后端的代码要保持一致(名字自己定义),写代码要细心 修改成功后的界面