Python 3.10来了,switch语法终于出现
开发者(KaiFaX)
面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区
来源:机器之心
正文
不用再自己琢磨如何实现 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 <pattern_1>:<action_1>case <pattern_2>:<action_2>case <pattern_3>:<action_3>case _:<action_wildcard>
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
你还有什么想要补充的吗?
1. 回复“m”可以查看历史记录;
2. 回复“h”或者“帮助”,查看帮助;
开发者已开通多个技术群交流学习,请加若飞微信:1321113940 (暗号k)进开发群学习交流
说明:我们都是开发者。视频或文章来源于网络,如涉及版权或有误,请您与若飞(1321113940)联系,将在第一时间删除或者修改,谢谢!
开发者:KaiFaX
面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区
Python 3.10来了,switch语法终于出现相关推荐
- 【Python】switch语法你真的懂吗
对于从事数据科学和人工智能领域的人们来说,Python 是大家的首选编程语言.根据最近的一项调查,27% 的程序员开发职位要 求掌握 Python 语言,今年年初这一数字还只是 18.5%. Pyth ...
- Python 3.10来了!!!
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器之心 编辑丨极市平台 导读 不用再自己琢磨如何实现 swi ...
- python 3.10 新增 switch-case 简介
目录 01 通用语法 02 在元组中运用 03 类(class) 04 if 子句模式 05 复杂模式和通配符 01 通用语法 Switch 语句存在于很多编程语言中,早在 2016 年,PEP 31 ...
- Python 3.10 尝鲜
Python 3.10 尝鲜 图源:giaiphapso.com Python 3.10 版本已经在本月初(10.4)正式发布,其中最让人振奋的新特性是模式匹配,简单的说就是Python终于引入了类似 ...
- python 3.10 的新特性用不到,你来打我!!!
文 | 某某白米饭 来源:Python 技术「ID: pythonall」 python 3.10 已经在 10月 4 号发布了,这次更新了错误语法提示对 python 新手更加友好.好几个新的特性非 ...
- 刚刚,Python 3.10 正式发布了,我发现了一个可怕的功能..
就在( 2021年10月4日) Python 终于正式发布了 3.10 版本,看了下这个版本的一些特性,最受关注的应该就是 结构模式匹配 了吧?也就是大家所熟悉的 switch-case ,写错了不好 ...
- Python 3.10的几个好用的新特性
来源:Deephub Imba本文约1200字,建议阅读5分钟 本文为你介绍Python 3.10新的有用的特性. 3.10版没有添加新的模块,但是引入了很多新的并且有用的特性.让我们来一起看看吧. ...
- 【Python】刚刚,Python 3.10 正式发布了!我发现了一个可怕的功能...
就在2021年10月4日, Python 终于正式发布了 3.10 版本,看了下这个版本的一些特性,最受关注的应该就是 结构模式匹配 了吧?也就是大家所熟悉的switch-case,写错了不好意思,是 ...
- 刚刚,Python 3.10 正式发布了!我发现了一个可怕的功能...
" 阅读本文大概需要 8 分钟. " 就在前几天( 2021年10月4日) Python 终于正式发布了 3.10 版本,看了下这个版本的一些特性,最受关注的应该就是 结构模式匹配 ...
最新文章
- MyBatis(增删改查)
- python调用hive与java调用区别_Python操作Hive的两种方法总结
- CentOS 6 安装Hadoop 2.6 (一)准备工作
- java java 检查型异常_如何整合Java中的有效性检查和异常抛出?
- Redis 系列之CentOS下Redis的安装
- 【转】Google Chrome浏览器调试
- vue使用a标签下载文件_Vue a标签实现点击下载,下载图片、txt文件,不是直接打开的方式...
- php添加页脚,WordPress网站页脚footer.php修改图文教程
- win10系统添加打印机
- 采众家之长 凯翔软件定义存储能够后来居上吗?
- 理想电压源和理想电流源
- PERT 活动图 关键路径
- 【KMP】OKR-Periods of Words
- 可折叠设备的桌面模式
- 《权威指南》笔记 - 8.8函数式编程
- 在线生成图片大全——绝对经典
- 【前端三剑客】JavaScript 网页脚本语言(AJAX)
- composer install 出现的问题
- 百钱买百鸡问题java_Java版百钱买百鸡
- 扫地机器人如何才能避障不“智障”?五种主流的避障技术解析