当前位置: 首页 > 后端技术 > Python

学python,怎么能不懂PEP呢?

时间:2023-03-25 19:58:20 Python

作者:猫下豌豆花来源:Python猫可能你是Python初学者,不知道什么是PEP。又或者你是学过Python的精通者,也看过几个PEP,但是你不知道这东西背后是什么。没错,本文将系统地介绍PEP,和大家一起加深对PEP的理解。目前国内教程种类繁多。虽然或多或少提到了PEP,但是一般的有很多,也有很多仅限于某个PEP。能详细全面介绍PEP的文章不多。这篇文章的目的是尽可能全面地介绍什么是PEP,告诉你为什么要阅读PEP,并列出一些我认为必须阅读的PEP。最后收集了几个PEP的中文翻译,希望能提供Python学习的汉化资料,做出一些贡献。什么是PEP?PEP的全称是pythonEnhancementProposals,其中Enhancement是增强和改进的意思,Proposals可以翻译成提案或提议,所以合在一起,比较常见的翻译是Python增强建议或Python改进建议。我个人倾向于前者的翻译,因为它更贴切。Python核心开发者主要通过邮件列表讨论问题、提议、计划等。PEP通常是对多方的信息进行汇总,经过一些核心开发者的审核通过,最终的正式文件起到了宣传的作用,所以我觉得翻译成“proposal”比较合适。PEP的官网是:https://www.python.org/dev/peps/,这是PEP0的地址,其他PEP的地址是后面拼接的数字,例如:https://www.python.org/dev/pe...是指向PEP20等的链接。第一个PEP出生于2000年,现在刚好18岁。到目前为止,它有478个“兄弟姐妹”。正式地,PEP分为三类:I-InformationalPEPP-ProcessPEPS-StandardsTrackPEP。比如PEP20(TheZenofPython,大名鼎鼎的Python之禅)、PEP404(Python2.8Un-releaseSchedule,声明不会有Python2.8版本)。进程类:这类PEP主要是Python本身之外的外围信息。比如PEP1(PEPPurposeandGuidelines,即关于PEP的指南)、PEP347(MigratingthePythonCVStoSubversion,即关于迁移Python代码仓库)。标准类:这类PEP主要描述Python的新功能和新实践(实现),提案数量最多。比如我之前推文《详解Python拼接字符串的七种方式》中提到的f-string方法就来自于PEP498(LiteralStringInterpolation,字面字符串插值)。每个PEP最初都是一个草案(Draft),然后会经过一个流程,所以会有不同的状态。下面是一个流程图:PEP流程流程图A–Accepted(StandardsTrackonly)orActiveproposalD–DeferredproposalDeferredproposalF–FinalproposalFinalproposalP–ProvisionalproposalTentativeproposalR–RejectedproposalRejectedproposalS–SupersededproposalReplaced程序流程图proposalW–WithdrawnproposalWithdrawnproposal在PEP0(IndexofPythonEnhancementProposals(PEPs))中,所有PEP的官方列表,您可以按序列号排序,按类型和按状态检索。在PEP1(PEPPurposeandGuidelines)中,官方详细介绍了PEP的意图,如何提交PEP,如何修复和更新PEP,以及PEP审查的机制等。为什么要读PEP?无论您是刚刚开始使用Python、经验丰富的从业者,还是经验丰富的黑客,都应该阅读Python增强建议。在我看来,阅读PEP至少有以下好处:(1)了解Python有哪些特性,它们与其他语言特性的区别,为什么要设计这些特性,如何设计,以及如何更好地使用它们;(2)关注社区动态,了解行业最佳实践,调整学习方向,完善工作业务内容;(3)参与热点话题的讨论,或提交新的PEP为Python社区做贡献。毕竟,学习用Python编程只是触及表面。PEP提案是深入理解Python的途径,是真正掌握Python语言的关键,是让Python得心应手的指南。需要阅读哪些PEP?前面说过,已经积累了478个PEP提案,我们不需要熟悉每一个PEP,没有必要。下面,我列出了一些PEP,推荐你阅读:PEP0--IndexofPythonEnhancementProposalsPEP7--StyleGuideforCCode,CExtensionPEP8--StyleGuideforPythonCode,CodingSpecification(MustRead)PEP20--TheZenofPython,ZenofPythonPEP202--ListComprehensions,列表生成PEP274--DictComprehensions,字典生成PEP234--Iterators,迭代器PEP257--DocstringConventions,文档注释规范PEP279--enumerate()内置函数,enumerate枚举PEP282--ALoggingSystem,日志模块PEP285--添加bool类型,布尔值(推荐阅读《Python对象的身份迷思:从全体公民到万物皆数》)PEP289--GeneratorExpressions,生成器表达式PEP318--函数和方法的装饰器,装饰器PEP342--通过增强生成器的协程,协程PEP343--“with”语句,withstatementPEP380--委托给子生成器的语法,yieldfromsyntaxPEP405--PythonVirtualEnvironments,虚拟环境PEP471--os.scandir()函数,遍历目录PEP484--类型提示,类型约束PEP492--具有异步和等待语法的协程,异步/等待语法PEP498--Python字符串插值,字符串插值PEP525--异步发电机,异步发电机PEP572--作为SignmentExpressions,assignmentwithinexpressions(最有争议)PEP3105--Makeprintafunction,print改为函数PEP3115--MetaclassesinPython3000,metaclassPEP3120--UsingUTF-8asthedefaultsourceencodingPEP3333---PythonWebServerGatewayInterfacev1.0.1,WebDevelopmentPEP8000--PythonLanguageGovernanceProposalOverview,GvR爸爸推出决策层后,涉及新的决策计划对PEP的贡献。虽然没有确切的数据可以作证,但中国的Python开发者数量应该比任何国家都多。但是,翻看PEP0中列出的200多位PEP作者,我只看到一个中文名字很像汉语拼音的(不排除是我漏了,或者用了英文名字)。反差太大了。我特别希望国内Python黑客的名字能越来越多的出现在那个榜单上,在Python核心开发者的榜单上。另外,还有一个非常有效的PEP投稿方式,就是将PEP翻译成中文,造福国内的python学习社区。查找了一下,没有看到系统翻译PEP的项目,只是零星的翻译了某个PEP。