Python中必读的PEP提案

简介: Python中必读的PEP提案

什么是PEP

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

0、PEP8

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

什么是Python?

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


1、PEP257

除了PEP8,还有 PEP257 是编写可维护代码的一份提案,它是用来指导程序员如何规范书写文档说明(Docstring) 的提案。我们知道Python是动态语言,动态语言的优点是代码简洁,但是缺乏约束性,所以很多时候需要通过文档说明来对代码进行说明才知道方法的参数需要什么类型,返回值是什么类型。但是这种方式有弊端,大部分程序员不喜欢写文档,又接受不了别人不写文档。

2、PEP20

说到Python里面隐藏的彩蛋,PEP20算得上一个,在Python终端导入this模块,有二十条(其实是19条)关于Python编程的禅学,还没看过的可以在Python命令行输入 import this 试试,讽刺的是,this 模块的源代码晦涩难懂,这也是作者想从侧面来说明代码可读性的意义。


3、PEP 557

PEP 557 是最近 Python3.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
@dataclass
class DataClassCard:
    rank: str
    suit: str

它和上面的代码段是完全等价的,是不是瞬间对Python又多一份爱了

地址: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,526 是提案给变量指定类型的。

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/

以上每个PEP8都可以长篇大论一番,鉴于篇幅有限只能做到抛砖引玉,还请读者自行对每个不了解的PEP深入学习并掌握。


目录
相关文章
|
6月前
|
测试技术 API Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性
69 2
|
6月前
|
测试技术 程序员 数据库
Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
112 0
|
6月前
|
Python
Python 3.10 版本采纳了首个 PEP,中文翻译即将推出
Python 3.10 版本采纳了首个 PEP,中文翻译即将推出
43 3
|
5月前
|
API 项目管理 开发者
PEP是Python改进的关键文档,用于提议新特性和标准化变更
【6月更文挑战第26天】PEP是Python改进的关键文档,用于提议新特性和标准化变更。它们提出功能设计,记录社区决策,建立标准,促进共识,并改进开发流程。PEP是Python不断演进和优化的核心机制,驱动语言的未来发展。**
46 2
|
4月前
|
API 开发工具 git
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
|
6月前
|
Python
在Python Web开发过程中:PEP 8编码规范中的一些关键规则是什么?
**PEP 8是Python代码风格指南,关键规则包括:使用4空格缩进,行最大长度79字符,函数间留2空行,每导入独占一行,运算符两侧各空一格,小写下划线命名函数,注释清晰简洁,统一引号风格,括号内不加空格,多行列表/参数末尾即使单元素也加逗号,提升代码一致性与可维护性。**
30 3
|
6月前
|
开发者 Python
Python 的编码规范和最佳实践: 什么是 PEP 8?为什么要遵循 PEP 8 编码规范?
**PEP 8是Python的代码风格指南,促进代码一致性与可读性。它规定4个空格缩进,每行不超过79字符,变量名用下划线分隔小写,类名驼峰式大写。遵循PEP 8提升代码易读性,增强团队协作效率,支持社区代码质量。**
82 0
|
存储 数据库 数据安全/隐私保护
如何用PEP 8编写漂亮的Python代码
如何用PEP 8编写漂亮的Python代码
|
6月前
|
Rust NoSQL 测试技术
Python 潮流周刊#24:no-GIL 提案正式被采纳了!
Python 潮流周刊#24:no-GIL 提案正式被采纳了!
53 0