或许你是一个初入门 Python 的小白,完全不知道 PEP 是什么。又或许你是个学会了 Python 的熟手,见过几个 PEP,却不知道这玩意背后是什么。那正好,本文将系统性地介绍一下 PEP,与大家一起加深对 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 呢?的更多相关文章

  1. Linux运维人员如何学习python编程

    Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...

  2. 【转】布同:如何循序渐进学习Python语言

    大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...

  3. 零基础2018如何系统地学习python?

    首先告诉你的是,零基础学习开始系统学习Python肯定难,Python的专业程度本身就不简单,学习这事本来就是一件非常煎熬的事情,人都不愿意学习,可是没办法,为了生存掌握一个技能,你必须学,如果你认真 ...

  4. python学习: 如何循序渐进学习Python语言

    大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...

  5. 学习 python 编写规范 pep8 的问题笔记

    决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...

  6. D03——C语言基础学习PYTHON

    C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...

  7. Python学习---Python安装与基础1205

    1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...

  8. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  9. 在学习python的Django\Flask\Tornado前你需要知道的,what is web?

    我们都在讲web开发web开发,那到底什么是web呢? 如果你正在学习python三大主流web框架,那这些你必须要知道了 软件开发架构: C/S架构:Client/Server    客户端与服务端 ...

随机推荐

  1. Tinyhttp源码分析

    简介 Tinyhttp是一个轻量型Http Server,使用C语言开发,全部代码只500多行,还包括一个简单Client. Tinyhttp程序的逻辑为:一个无线循环,一个请求,创建一个线程,之后线 ...

  2. 【代码总结】Struts2 Action接受参数方式的对比

    一.属性方式 1.Action中:对应表单参数的setter.getter 2.页面中  :Form中元素name取值属性名 <s:property value="属性名" ...

  3. 分享链接在QQ内总是被多人举报怎么办,域名防红的方案

    背景 相信大家经常会遇到一个头疼的问题就是,自己的推广链接会因多人投诉举报导致链接在QQ内转发分享会被QQ管家拦截,用户无法打开访问的问题. 那么当大家遇到这个问题的时候应该怎么办呢?不用急,下面分享 ...

  4. Chrom Develop Extensions

    Chrome插件 Extensions are small software programs that customize the browsing experience. They enable ...

  5. Django视图层、模板层

    过滤器方法 upper 大写方式输出 add 给value加上一个数值 capfirst 第一个字母大写 center 输出指定长度的字符串,把变量居中 cut 删除指定字符串 date 格式化日期 ...

  6. Logarithmic-Trigonometric积分系列(二)

    \[\Large\displaystyle \int_0^{\pi/2}\ln^2(\sin x)\ln(\cos x)\tan x \,{\rm d}x\] \(\Large\mathbf{Solu ...

  7. 面向对象--OO--object-oriented

    如何把大象装冰箱? 面向过程:打开冰箱门---把大象装进去---关上冰箱门 面向对象: 1.大象:进入冰箱.离开冰箱 2.冰箱:开门.关门 3.人:检测1.检测2 面向对象三大特性:封装.继承.多态 ...

  8. Django报错 The serializer field might be named incorrectly and not match any Got AttributeError when attempting to get a value for field `author_for` on serializer `KnownledgeBaseListSerializer`

    1.问题描述,在设置,model部分字段的serialier时,出现如下报错 字段如下: # 知识库List class KnownledgeBaseListSerializer(serializer ...

  9. redis持久化2

    编程迷思 博客园 首页 联系 订阅 管理 随笔 - 11  文章 - 0  评论 - 318 深入学习Redis(2):持久化 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次 ...

  10. Kmp算法浅谈

    Kmp算法浅谈 一.Kmp算法思想 在主串和模式串进行匹配时,利用next数组不改变主串的匹配指针而是改变模式串的匹配指针,减少大量的重复匹配时间.在Kmp算法中,next数组的构建是整个Kmp算法的 ...