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

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

 

对于从事数据科学和人工智能领域的人们来说,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 语句纳入其中。

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

  1. with (  
  2.     CtxManager1() as example1,  
  3.     CtxManager2() as example2,  
  4.     CtxManager3() as example3,  
  5. ):  
  6.     ... 

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

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

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

  1. match subject:  
  2.     case <pattern_1> 
  3.         <action_1>  
  4.     case <pattern_2> 
  5.         <action_2>  
  6.     case <pattern_3> 
  7.         <action_3>  
  8.     case _:  
  9.         <action_wildcard> 

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

  1. http_code = "418"  
  2. match http_code:  
  3.     case "200":  
  4.         print("OK")  
  5.         do_something_good()  
  6.     case "404":  
  7.         print("Not Found")  
  8.         do_something_bad()  
  9.     case "418":  
  10.         print("I'm a teapot")  
  11.         make_coffee()  
  12.     case _:  
  13.         print("Code not found") 

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

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

  1. http_code = "418"  
  2. if http_code == "418":  
  3.     print("OK")  
  4.     do_something_good()  
  5. elif http_code == "404":  
  6.     print("Not Found")  
  7.     do_something_bad()  
  8. elif http_code == "418"  
  9.     print("I'm a teapot")  
  10.     make_coffee() 
  11.  else:  
  12.     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,为开发者提供了另一种选择。 

 

责任编辑:庞桂玉 来源: 机器学习算法与Python学习
相关推荐

2021-04-16 15:02:38

Python 开发编程语言

2021-01-24 08:20:55

微信微信8.0.1移动应用

2009-10-15 08:52:42

Windows 7销售市场

2022-12-05 11:44:49

PrintDebugIceCream

2023-03-16 19:17:57

2018-08-24 06:13:18

IPv6SDNIPv4

2020-10-14 15:00:38

Python 开发编程语言

2021-11-17 10:18:31

iOS苹果系统

2020-02-11 13:05:42

Wi-Fi 65GWi-Fi

2012-07-16 14:32:44

2022-02-13 00:03:06

AndroidAndroid 13安卓

2010-08-06 12:01:46

RIP协议IPv6

2020-04-13 17:17:28

MySQL8.0功能

2022-05-31 16:08:25

Web3算法挑战

2013-07-17 10:07:29

Windows Pho功能

2013-02-25 10:33:52

Windows 8Windows Blu

2011-06-03 09:33:01

Windows 8

2021-04-20 19:23:07

语法switch-casePython

2013-07-12 09:59:58

Android 5.0

2017-04-17 09:01:39

科技新闻早报
点赞
收藏

51CTO技术栈公众号