python中的PEP是什么?怎么理解?(转)
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),是数量最多的提案。例如我之前提到过的f-string方式,它出自PEP 498(Literal String Interpolation,字面字符串插值)。
每个PEP最初都是一个草案(Draft),随后会经历一个过程,因此也就出现了不同的状态。以下是一个流程图:
PEP process flow diagram
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,编码规范(必读)
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
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),如何看待PEP 572(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
最后,表达一下我的私心:
(1)希望本文能给大家带来知识和见识的增长,激发一些小伙伴的学习热情
(2)希望有小伙伴去翻译更多的PEP,造福Python中文社区
python中的PEP是什么?怎么理解?(转)的更多相关文章
- python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)
转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需 ...
- Python中的装饰器的初步理解
什么是装饰器? 装饰器的本质是一个函数,其作用是用来装饰其他的函数,给其他函数附加行的功能. 原则: 1.不能修改被装饰函数的源码. 2.不能改变被装饰函数的调用方式. 那么什么是函数? 简单的来说: ...
- python中对多态和多态性的理解
python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal( ...
- Python中的*args和**kwargs的理解与用法
一.简述 1.*args和**kwargs 这两个是python中方法的可变参数. 2.*args表示任何多个无名参数,它是一个tuple: 3.**kwargs表示关键字参数,它是一个dict.并且 ...
- Python 中的变量还能这样理解(白话)
一.案例分析 1.思考 计算软件测试大佬柠檬小姐姐,每月能存多少钱 # 计算软件测试大佬柠檬小姐姐,每月能存多少钱 # 坐标:深圳 # 2018年1月份 # 房租水电 4000元 # 伙食费 1000 ...
- python中的__name__=='__main__'如何简单理解(一)
1. 摘要: 通俗的理解_name_ == '_main_':假如你叫小明.py,在朋友眼中,你是小明(_name_ == '小明'):在你自己眼中,你是你自己(_name_ == '_main_') ...
- python中的字符串编码问题——1.理解编码和解码问题
理解编码与解码(python2.7):1)编码 是根据一个想要的编码名称,把一个字符串翻译为其原始字节形式.>>> u_str=u'字符串编码aabbbcccddd'>> ...
- python中关于__init__模块文件的理解
一般来说新建的一个包下,必然会有一个__init__文件?那么这个文件到底邮有和作用呢? 总结几点如下: 1.__init__文件在包下,其中定义了包的属性,方法;必须要有这个文件,如果没有的话,这个 ...
- 关于引用(python中的伪指针)的理解
# 总结:个人理解,引用不可变的的变量时,随着改变会指向新的地址 # 引用可变的变量时,位置不会随着变量改变而改变 a = 1 b = a print(b) a = 2 # 指向了新的内存地址 pri ...
随机推荐
- nodejs的某些api~(六)HTTPS
node的HTTPS模块接口与HTTP其实差不多,就是多了一个认证证书,私钥的配置等等,API都相似的. 在客户端服务器通信的方法中,只有HTTPS是最安全的,它的原理是客户端和服务器发送自己的公钥, ...
- 如何刻录cd音乐
用nero,选择cd,音乐光盘(第一个)可以添加入wav,MP3等.刻录即可.
- 微信小程序框架——wepy使后感
更新:2018年1月10日15:32:22 在ios8及部分机型下会有样式混乱的问题,经查找,原因是缺少浏览器前缀,需要加prefix. 解决方案见链接:wepy-less-autoprefix 另外 ...
- 前端JS Excel解析导入
本文转载自:https://www.cnblogs.com/yinqingvip/p/6743213.html 需要用到js-xlsx:下载地址:js-xlsx <!DOCTYPE html&g ...
- CF1080F Katya and Segments Sets
题意:给定n个区间,每个区间有颜色.m次询问,每次询问:这n个区间中所有被包含在[x, y]这一区间中的区间,它们的颜色是否取遍了[l, r]中的所有颜色. 强制在线. 解:第一步是大家都熟悉的套路⑧ ...
- js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
var time_range = function (beginTime, endTime, nowTime) { var strb = beginTime.split (":") ...
- (转)你应该知道的RPC原理
背景:对于项目中的RPC框架,仅仅停留在使用层面,对于其底层的实现原理不是很清楚.这样的后果是很危险的,对于面试官来说,跟不知道这个东西一样. 转载自:https://www.cnblogs.com/ ...
- Methods for follow-up research of exome analysis:外显子后续分析研究思路总结
外显子后续分析研究思路一般有以下几种(Methods for follow-up research of exome analysis): 1.对突变频率.突变类型.突变方式进行统计分析 Mutati ...
- node(基础)_node中的javascript
一.前言 ...
- mongodb的sql日志
在Yii2中是没有打印出mongodb的sql语句,故借用下log来查看吧. 在网上有说可以使用$model->find()->createCommand()->getRawSql( ...