Python 3.10新加入switch语法

时间:2021-6-4 作者:qvyue

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 语句纳入其中。
不过在python中使用的是match-case
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 中找到的值执行不同的操作。

Python 3.10新加入switch语法

同样的,你也可以使用一组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-casehttp_code == 看起来更加清晰。

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

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

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

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。