年薪20万Python工程师进阶(6):Python中10个必读的PEP提案

题图:Photo by Dan Aragón on Unsplash

什么是PEP

PEP 是 Python 增强提案(Python Enhancement Proposal)的缩写。社区通过PEP来给 Python 语言建言献策,每个版本你所看到的新特性和一些变化都是通过PEP提案经过社区决策层讨论、投票决议,最终才有我们看到的功能。

0、PEP8

如果你还不知道PEP8是什么,可能还算不上一位合格的Python程序员,PEP8是每个Python程序员必读的提案,Python虽然以简洁地的语法著称,但是并不意味着你就一定能写出简洁优雅的代码,PEP8风格指南定义了编写 Python 代码的规范和应该遵守的编码原则,我们在在编写代码的过程中都应该按照此规范约束我们的代码。每个开发者都应该多读几遍,做到了然于心。网上有各种版本的中译版,可选择性参考阅读。

有个通用的约定应该是可维护的、清晰可懂的、满足一致性的,同时也应该是好的编程习惯的基础。它不会违背你的意愿来强制要求你遵循那些规则。这就是Python!” — Tim Peter

地址:https://www.python.org/dev/peps/pep-0008/

1、PEP257

除了PEP8,还有PEP257是编写可维护代码的一份提案,指导程序员如何规范书写文档说明(Docstring) 的提案。我们知道Python是动态语言,动态语言的优点是代码简洁,但是缺乏约束性,所以很多时候需要通过文档说明来表达代码,提高代码的可维护性。

地址:https://www.python.org/dev/peps/pep-0257/
中译版:https://my.oschina.net/LuCastiel/blog/1552148

2、PEP20

说到Python里面隐藏的彩蛋,PEP20算得上一个,在Python终端导入this模块,有二十条(其实是19条)关于Python编程的禅学,还不看过的可以在Python命令行输入 import this 试试,讽刺的是,this 模块的源代码晦涩难懂,这也是从作者从侧面来说明代码可读的重要性。
地址: https://www.python.org/dev/peps/pep-0020/

image

3、PEP 557

PEP 557 是最近3.7中加入的新特性,叫做数据类(data class),此举也是让程序员写更少的代码,以前定义一个类,如果该类有很多属性的话,初始化时敲键盘手酸,比如以前一个类:

class RegularCard
    def __init__(self, rank, suit):
        self.rank = rank
        self.suit = suit

    def __repr__(self):
        return (f'{self.__class__.__name__}'
                f'(rank={self.rank!r}, suit={self.suit!r})')

    def __eq__(self, other):
        if other.__class__ is not self.__class__:
            return NotImplemented
        return (self.rank, self.suit) == (other.rank, other.suit)

那些魔术方法你全部要手动实现,现在不要了,你只要在类上面加一个装饰器@dataclass

from dataclasses import dataclass@dataclassclass DataClassCard:    rank: str    suit: str

它和上面的代码段是完全等价的,默认帮你实现了__init__等所有魔术方法。

地址:https://www.python.org/dev/peps/pep-0557/

4、 PEP 435

枚举在Python2中被认为是一个没用的东西,打脸的是社区觉得枚举还是有存在的必要,于是 PEP 435 就专门添加了一种枚举类型,话说,在现代编程中,没有枚举真的不能称之为一门完整的语言。

>>> from enum import Enum>>> class Color(Enum):...     red = 1...     green = 2...     blue = 3

地址:https://www.python.org/dev/peps/pep-0435/

5、 PEP 3156

PEP 3156 是Python 3.4 中引入异步I/O框架asyncio 的一个提案,提供了基于协程做异步I/O编写单线程并发代码的基础设施。随后在PEP492 中引入了 async/await语法 以及 PEP380中的yield from 语法,自此,Python有了原生的协程支持,不再依赖外部第三方库。

地址:https://www.python.org/dev/peps/pep-3156/

6、 PEP 484

Python是一门动态语言,所谓动态类型语言是指我们在定义变量,返回返回值的时候无需指定类型,解析器在运行的时候会自动判断其类型,某种程度上让代码变得更简洁,与此同时,带来的副作用就是在多人合作,bug定位和代码可读性等方面的不方面,所以前面介绍的 PEP257 就是通过文档来规范代码,但是文档是非强制性的,你不写对代码的运行一点影响也没有,所以 PEP 484 (Python3.5 引入)提出了从代码层面上加入了静态语言的部分特性—-类型提示(Type Hints),你现在可以在函数、方法、类的参数和返回值声明其类型。与之类似还有PEP526,不过是关于它是用来给变量指定类型的。

def greeting(name: str) -> str:    return "Hello, {}!".format(name)

现在你会明白,Java作为静态语言的优势了吧。

地址:https://www.python.org/dev/peps/pep-0484/

7、PEP 572

PEP 572 是关于表达式赋值的提案,语法是这样的:

while chunk := file.read(8192):   process(chunk)

该提案在社区争议性比较大,就是因为这个提案让 Python 之父愤然退出 Python 核心决策层,因为这个提案与社区其他成员产生了比较大的分歧。虽然Python之父不再是 BDFL,但是该提案最终还是被纳入到 Python3.8 中。

地址:https://www.python.org/dev/peps/pep-0572/

8、PEP 404

PEP 404 正如其名,一个关于 Python2.8 版本号不存在的提案,Python之父曾说过,如果Python3要兼容Python2,可能这个项目已经失败了,因为Python2有太多的历史包袱,所以Python2.7将成为Python2的终结版本号,所有的新特新将加入到Python3中。

地址:https://www.python.org/dev/peps/pep-0404/

9、 PEP 0

说到必看的 PEP,可能远不止我上面列的这些,于是有一个专门的PEP是用来索引所有PEP的集合。

地址:https://www.python.org/dev/peps/pep-0000/

还有哪些PEP是你值得一读的?欢迎留言、点赞、转发

(版权所有:志军100,微信公众号:python之禅)
点赞关注.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,965评论 1 3
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,454评论 6 428
  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,801评论 0 27
  • 文/Bruce.Liu1 1.Python前世今生 1.1.Python历史 Python的创始人: Guido ...
    BruceLiu1阅读 11,788评论 3 120
  • 又是一天清晨,又是一天上学日。日子已经步入初夏,空气也渐渐热起来,天也亮得早了。 七点钟,学生们陆陆续续出门上学去...
    万年污妖王w阅读 226评论 0 2