Py学习  »  Python

Python 3.10来了,switch语法终于出现

表哥有话讲 • 5 年前 • 418 次点击  

转载:机器之心


不用再自己琢磨如何实现 switch 功能了。

对于从事数据科学和人工智能领域的人们来说,Python 是大家的首选编程语言。根据最近的一项调查,27% 的程序员开发职位要求掌握 Python 语言,今年年初这一数字还只是 18.5%。


Python 流行的原因在于其拥有非常直观的能力:这门语言拥有大量的库、足够高的生产效率,还相对易于学习。去年 10 月,Python 的 3.9 版正式发布了,从字典更新 / 合并到添加新的字符串方法,再到 zoneinfo 库的引入,Python 3.9 添加了许多新特性.

Python3.10 的第二个 alpha 版本也已于去年 11 月初发布,相比于不久前发布的 3.9 版本,新版本对类型注释扩展、zip、位计数、字典映射又有了新的改进。就在昨天,Python 3.10 beta 版发布了,新的 beta 版最大的亮点可能就是引入了 switch-case 语句。

Python 3.10 beta 版新改进

Switch 语句存在于很多编程语言中,但 Python 编程语言不支持 Switch 语句。早在 2016 年,PEP 3103 就被提出,建议 Python 支持 switch-case 语句。然而,在调查中发现很少人支持该特性,Python 开发人员放弃了它。

时间在推到 2020 年,Python 的创始人 Guido van Rossum,提交了显示 switch 语句的第一个文档,命名为 Structural Pattern Matching,见 PEP 634 。

如今,随着 Python 3.10 beta 版的发布,终于将 switch-case 语句纳入其中。

带圆括号的上下文管理器:现在支持在上下文管理器中跨多行使用括号进行延续。也可以在所包含组的末尾使用逗号。

with (    CtxManager1() as example1,    CtxManager2() as example2,    CtxManager3() as example3,):    ...

错误消息 - NameErrors:当打印由 interpreter 引发的 NameError 时,PyErr_Display() 将在引发异常的函数中提供相似变量名的建议:


PEP 634 结构模式匹配:模式匹配允许用户在 match 后面跟随数个 case 语句。当在程序执行 match-case 时,有匹配的语句,程序就会进入相应的 case 语句来执行操作。

match-case 语法和操作:模式匹配的通用语法是:

match subject:    case:            case:            case:            case _:        

match 语句接受一个表达式,并将其值与作为一个或多个 case 块给出的连续模式进行比较。match-case 示例如下:

http_code = "418"match http_code:    case "200":        print("OK")        do_something_good()    case "404":        print("Not Found")        do_something_bad()    case "418":        print("I'm a teapot")        make_coffee()    case _:        print("Code not found")

下图是 match-case 语句执行示意图。程序会检查多个 case 条件,并根据在变量 http_code 中找到的值执行不同的操作。


同样的,你也可以使用一组 if-elif-else 语句来构建相同的逻辑:

http_code = "418"if http_code == "418":    print("OK")    do_something_good()elif http_code == "404":    print("Not Found")    do_something_bad()elif http_code == "418"    print("I'm a teapot")    make_coffee()else:    print("Code not found")

然而,通过使用 match-case 语句,删除了 http_code == 的重复执行,当测试许多不同的条件时使用 match-case,http_code == 看起来更加清晰。

我们可以通过一个简单的例子来了解模式匹配:用 C、Java 或 JavaScript(以及许多其他语言)中的 switch 语句将对象(数据对象)与文本(模式)进行匹配。switch 语句通常用于将对象 / 表达式与包含文字的 case 语句进行比较。

虽然使用嵌套 if 语句的命令式指令系列可以用来完成类似于结构模式匹配的任务,但它不如声明式方法那么清晰。相反,声明性方法声明了匹配所需满足的条件,并且通过其显式模式更具可读性。虽然结构模式匹配可以以最简单的形式使用,将变量与 case 语句中的文本进行比较,但它对 Python 的真正价值在于它对对象类型和大小的处理。

match-case 可以说是此次 Python 3.10 beta 版本最大的亮点。对于这种表达式,有人喜欢,有人憎恶。在 Python 还不支持 switch-case 之前,大家可能都是使用字典进行相关操作。有人说 switch 除了读着方便,没什么优点;还有人说 Python 的闭包机制,dict 的 value 可以是带闭包的函数,这样就使得表达能力比 switch-case 更上一层楼;但总归 Python 3.10 beta 版本纳入了 switch-case,为开发者提供了另一种选择。

更多详细信息,请参考:https://docs.python.org/3.10/whatsnew/3.10.html

参考链接:https://towardsdatascience.com/switch-case-statements-are-coming-to-python-d0caf7b2bfd3

重磅!程序员遇见GitHub交流群已成立!


额外赠送福利资源!邱锡鹏深度学习与神经网络,pytorch官方中文教程,利用Python进行数据分析,机器学习学习笔记,pandas官方文档中文版,effective java(中文版)等20项福利资源

获取方式:进入群后点开群公告即可领取下载链接




推荐阅读:

我教你如何读博!

牛逼!轻松高效处理文本数据神器

B站强化学习大结局!

如此神器,得之可得顶会!

兄弟们!神经网络画图,有它不愁啊

太赞了!东北大学朱靖波,肖桐团队开源《机器翻译:统计建模与深度学习方法》

当年毕业答辩!遗憾没有它...

已开源!所有李航老师《统计学习方法》代码实现

这个男人,惊为天人!手推PRML!

它来了!《深度学习》(花书) 数学推导、原理剖析与代码实现

你们心心念念的MIT教授Gilbert Strang线性代数彩板笔记!强烈推荐!

GitHub超过9800star!学习Pytorch,有这一份资源就够了!强推!

你真的懂神经网络?强推一个揭秘神经网络的工具,ANN Visualizer

诸位!看我如何白嫖2020 icassp!

这个时代研究情感分析,是最好也是最坏!

BERT雄霸天下!

玩转Pytorch,搞懂这个教程就可以了,从GAN到词嵌入都有实例

是他,是他,就是他!宝藏博主让你秒懂Transformer、BERT、GPT!

fitlog!复旦邱锡鹏老师组内部调参工具!一个可以节省一篇论文的调参利器

Github开源!查阅arXiv论文新神器,一行代码比较版本差别,我爱了!

开源!数据结构与算法必备的 50 个代码实现

他来了!吴恩达带着2018机器学习入门高清视频,还有习题解答和课程拓展来了!

太赞了!复旦邱锡鹏老师NLP实战code解读开源!

这块酷炫的Python神器!我真的爱了,帮助你深刻理解语言本质!实名推荐!

论文神器!易搜搭

不瞒你说!这可能是世界上最好的线性代数教程

—————————————

往期精彩:


社群福利:程序员技术交流群

这可能是你离头部大佬最近的一次,为提高群成员质量,表哥特意邀请了华为、腾讯、阿里的朋友进群,方便大家学习交流,一起进步。

有兴趣入群的同学,可长按扫描下方二维码,一定要备注:城市+昵称+技术方向,根据格式备注,可更快被通过且邀请进群

▲长按扫


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/113925