如果你为Python写了一篇PEP,这篇PEP成功的被Python指导委员会接受了,那么以后你在吹牛皮的时候你就可以说我主导了Python语言某个特性的设计工作.

                              					-- 跬蟒

我就问你主导Python语言特性设计牛不牛皮,今天我就写一篇文章告诉大家如何去为Python设计一篇PEP,并且整个PEP从一个想法到Python语言去实现它的这一套流程:

假设你已经是一个Python高手了,在使用Python给过程中你觉得Python语言在某方面还不够完善,你有一个不错的想法可以去改善Python这方面的不足,你打算把你的想法加入到Python语言里面,所以你打算写一篇PEP,为Python的发展献言建策,那首先需要做什么呢?

  1. 首先你要确保你的想法是个新的想法是个比较大的想法,是一个由必要去建立一个PEP的想法,也许你发现了Python的一些小问题,但是这些小问题如果提交一个小补丁就可以解决了,那就没必要提PEP
  2. 当你确定自己的想法很牛B之后,你也不是马上就要提PEP,你首先要做的事情是引发社区的讨论,看看其他人怎么看,然后自己去实现一下这个想法看是否是可行的,并且发帖到 python-list@python.org mailing list或者到 python-ideas@python.org mailing list 进行进一步的确定,看看大家对你的想法是否认同,如果你能让大多数人都认同,那你就有戏,在你发帖之前最好准备一份高质量的PEP草稿,这样的话才会更容易的被接受
  3. 总之就是先讨论,得到大家的认可,避免后期不必要的撕逼,然受自己也要做好准备,最好有个简单的实现,然后还有个高质量的PEP草稿

写PEP你不得不知道的几个Python社区角色

PEP champion : PEP拥护者 也就是PEP的发起人,也就是跟大家说我有个非常XXX的想法的人

PEP author: PEP作者 就是写PEP的人,PEP从一个想法到一篇PEP草稿,再到一篇拥有官方PEP编号的PEP文档,到后面PEP审核通过,PEP复审出现改动,PEP被接受这个过程中维护PEP文档的人就是PEP的作者,大部分PEP作者就是PEP拥护者本人

PEP reviewer: 这个角色不是单指某一个人,一个PEP从想法到实现需要经过很多此review, 每一次参与review的人都可以被称作 PEP reviewer

PEP editor: PEP编辑者 就是对PEP进行初步审核的人,审核通过的PEP进入到github上面的PEP仓库的master分支,进行下一轮的评审

Python Core Developers: Python核心开发人员 就是开发Cpython解释器的那群人,都是大佬,都是大佬

Python's Steering Council: Python指导委员会 大佬中的大佬,从Python核心开发人员中选择出来的指导Python语言开发工作的一群人,对于PEP是否接受有着最终发言权

PEP的工作流程是这样的:

  1. PEP champion 先有一个高质量的idear(经过讨论分析和理性验证)
  2. 你去github上面去fork PEP仓库
  3. 在仓库中创建一个 pep-9999.rst的文件去把你的PEP草稿粘贴进去
  4. 确定你的PEP的类型,PEP的状态设为草稿,PEP头部按照模板写一波
  5. 把你的pep-9999.rst push到PEP仓库
  6. 然后PEP editors 会去审核你的提交
  7. 如果审核通过,这个本来是草稿的PEP会拿到一个正规的PEP编号,如果没有审核通过那PEP editors 会打回去让 PEP author 去修改
  8. 如果PEP审核通过拿到了PEP编号 PEP editor 会把这个新提交的PEP合并到PEP仓库的 master 分支
  9. 如果你的PEP的类型是Standards Track类,那你提交的PEP还会被发送给Python-dev list 成员进行再次review, 确保你的新PEP没有坑
  10. 有些听起很不错的PEP在实现的时候其实是非常蛋疼的,没做的时候想的挺好,真正去实现的时候才知道是否靠谱,最好的情况时你在提交PEP的时候你手里就已经有一个这个PEP的原型实现了,所以如果你的PEP类型是Standards Track类型那你就不仅需要准备设计文档,你还需要准备一个参考实现,以此来避免一些不切实际的想法

当然凡事都有例外,有些Python的核心开发者是不会走这个流程的因为他们本身的权限比较大,他们有直接push内容到PEP仓库的权限,所以有时候他们会直接给自己的PEP分配一个PEP编号push进入PEP仓库的master分支,当然这并不意味着这个PEP就被接受了,他只是绕过了PEP editor的审批而已,PEP被接受和PEP通过审批是完全两码事儿,只有通过Python指导委员会的同意,PEP计划实现,才能叫做PEP被接受.

如果我写的PEP无法审核通过被拒怎么办?

PEP被拒绝是很正常的事情,不要灰心,只要能够坚信自己的PEP是真正对Python有用的东西,真正好的idear,修改一下继续上就行了,但是被拒肯定是有原因的,最主要的原因就是下面几条:

  1. 该特性已经存在了
  2. 技术上不合理
  3. Python不需要去实现这样的特性,也就是说伪需求
  4. 无法进行后向兼容
  5. 不符合Python的设计哲学(Python设计哲学可以在Python交互解释器中输入import this获取)其实在PEP的审批阶段可以拿着自己的PEP idear去咨询Python指导委员会,因为PEP最终会不会被接受其实是由Python指导委员会所决定的,所以如果真的想要自己的PEP被接受,做好提前的沟通还是非常有必要的
  6. 奥对了还有一个蛋疼的要求,就是你的PEP草稿必须带着至少一名Python核心开发人员一起写,或者有一个Python核心开发人员指导你写,或者有一个经过Python指导委员会批准的非Python核心开发人员一起写,反正就是需要有一个能够被Python指导委员会所信任的人参与了你的PEP设计,如果没能满足这个条件 PEP editor有权直接驳回你的PEP草稿

PEP的复审和决定机制

一篇PEP是否最终被接受并且决定去实现是需要经过层层复审的,反正要经过很麻烦了一个流程,下面有个Python官方画的简单流程图:

但是实际情况比较复杂,有时候不会按照这个流程图来,但是这个流程图给人们提供了一个比较清晰的PEP工作流的概览

PEP格式和模板

这年头写啥文档没个模板真不行,PEP也是文档,所以模板搞起来:

  1. 首先PEP是UTF-8编码的rst文件,首先你需要去指导rst文件的格式,如果rst的语法格式你已经会了,那你就可以阅读官方的PEP 12--Sample reStructuredText PEP Template,没错PEP12是介绍rst格式PEP模板的PEP(有点绕),为什么要用rst格式?官方给出的解释是 容易转成html进行在线发布和阅读
  2. 每一篇PEP必须有一个标准的PEP头部,如下所示,带* 号是可写可不写的,不带* 号的是必须要写的,记住写PEP头的时候,头的各个字段的顺序,必须按照下图的内容去写,先后顺序不能乱

写道这里就讲的差不多了,但是其实PEP的书写还有很多的内容比如:

  1. 如何判断PEP是不是一个成功的PEP
  2. PEP提交之后发现内容有bug怎么解决
  3. PEP所有权以及所有权转移问题
  4. PEP editor的详细职责和工作流
  5. 等等问题,我就不写了,写不动了.....

想写PEP的可以先根据上面流程走一波,

然后等到遇到问题的时候再去查资料吧.

如果感觉本篇内容还不错,微信的朋友请点个在看,其他平台的朋友可以(近距离)扫描下方的二维码关注我的公众号 早睡蟒更多优质原创无广告内容等你来看.

学写PEP,参与Python语言的设计的更多相关文章

  1. Python语言学习之Python入门到进阶

    人们常说Python语言简单,编写简单程序时好像也确实如此.但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制.要想用好Pytho ...

  2. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  3. 用Python语言设计GUI界面

    我们大家都编写过程序,但是如果能够设计一个GUI界面,会使程序增添一个很大的亮点!今天就让我们来用目前十分流行的python语言写出一个最基本的GUI,为日后设计更加漂亮的GUI打下基础. 工具/原料 ...

  4. 你必须学写 Python 装饰器的五个理由

    你必须学写Python装饰器的五个理由 ----装饰器能对你所写的代码产生极大的正面作用 作者:Aaron Maxwell,2016年5月5日 Python装饰器是很容易使用的.任何一个会写Pytho ...

  5. 尚学python课程---12、python语言介绍

    尚学python课程---12.python语言介绍 一.总结 一句话总结: 1.操作简单:简便计算:允许通过单个“import”语句后跟一个函数调用来完成复杂的计算.虽慢 2.库丰富:比如人工智能和 ...

  6. 为什么学Python语言,只需四步全面了解Python语言

    为什么学Python语言,只需四步全面了解Python语言每个时代都会悄悄犒赏会选择的人,Python现在风口的语言Python--第三大主流编程语言Python , 是一种面向对象的解释型计算机程序 ...

  7. Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!

    Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!

  8. 教孩子学编程 python语言版PDF高清完整版免费下载|百度云盘|Python入门

    百度云盘:教孩子学编程 python语言版PDF高清完整版免费下载 提取码:mnma 内容简介 本书属于no starch的经典系列之一,英文版在美国受到读者欢迎.本书全彩印刷,寓教于乐,易于学习:读 ...

  9. Python语言应用解析,如何入门学Python?

    Python在机器学习人工智能领域非常流行,可以说是算法工程师的标配编程语言.Python语言广泛应用在web开发.大数据开发.人工智能开发.机器学习.后端开发等领域之中,近几年Python语言的趋势 ...

随机推荐

  1. uwsgi+nginx 502 bad get away 错误

    用uwsgi和nginx部署网站时有时候访问网站会出现502错误 配置,启动文件等完全没有问题. 目前解决方法是重启uwsgi就可以了(虽然说502错误应该有很多产生原因啦) 所用命令: $ ps - ...

  2. SpringBoot实现微信小程序登录的完整例子

    目录 一.登录流程 二.后端实现 1.SpringBoot项目结构树 2.实现auth.code2Session 接口的封装 3.建立用户信息表及用户增删改查的管理 4.实现登录认证及令牌生成 三.前 ...

  3. 前端和Nodejs的关系 简单理解

    前端使用JS脚本语言进行开发. JS脚本语言需要依赖一个平台运行,从而生成可视化的东西. Node.js提供这个平台,同时提供JS运行需要的一些插件.库.包.轮子.组件.功能等等. JavaScrip ...

  4. Java实现 第十一届 蓝桥杯 (本科组)省内模拟赛

    有错误的或者有问题的欢迎评论 计算机存储中有多少字节 合法括号序列 无向连通图最少包含多少条边 字母重新排列 凯撒密码加密 反倍数 正整数的摆动序列 螺旋矩阵 小明植树 户户通电 计算机存储中有多少字 ...

  5. Java实现洛谷 P1873 砍树(StreamTokenizer+IO+二分)

    P1873 砍树 输入输出样例 输入 5 20 4 42 40 26 46 输出 36 PS: get新知识,以前只知道STringTokenizer并没有了解过StreamTokenizer,这次才 ...

  6. Java实现 LeetCode 416 分割等和子集

    416. 分割等和子集 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: ...

  7. Java实现 LeetCode 236 二叉树的最近公共祖先

    236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x ...

  8. Java实现 LeetCode 22 括号生成

    22. 括号生成 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", &quo ...

  9. Java实现第八届蓝桥杯字母组串

    字母组串 由 A,B,C 这3个字母就可以组成许多串. 比如:"A","AB","ABC","ABA","AA ...

  10. [RH134] 8-磁盘管理

    一.磁盘结构 我们以但磁盘的硬盘为例,如图所示: 从内向往有很多的磁道(这里我们只画了5条,实际上非常多),这个磁盘被划分为很多扇区.每个扇区有一个固定的大小,例如512Bytes. 对于多磁盘的硬盘 ...