当前位置: 首页 > 科技观察

Python3.10来了,switch语法终于来了

时间:2023-03-18 16:03:29 科技观察

对于从事数据科学和人工智能领域的人来说,Python是每个人的首选编程语言。根据最近的一项调查,27%的程序员开发职位需要Python语言知识,高于今年年初的18.5%。Python流行的原因是它非常直观:该语言拥有大量的库,足够高效,并且相对容易学习。去年10月,Python3.9版本正式发布。从字典更新/合并到添加新的字符串方法,再到zoneinfo库的引入,Python3.9增加了许多新特性。Python3.10的第二个alpha版本也于去年11月初发布。与不久前发布的3.9版本相比,新版本在类型注释扩展、zip、位数、字典映射等方面有了新的改进。就在昨天,Python3.10测试版发布了,新测试版最大的亮点可能就是引入了switch-case语句。Python3.10beta新改进许多编程语言中都存在Switch语句,但Python编程语言不支持Switch语句。早在2016年,就提出了PEP3103,提议Python支持switch-case语句。然而,在调查发现对该功能的支持很少之后,Python开发人员放弃了它。2020年,Python创始人GuidovanRossum提交了第一个展示switch语句的文档,名为StructuralPatternMatching,参见PEP634。现在,随着Python3.10beta的发布,switch-case语句终于被包含进来。带括号的上下文管理器:上下文管理器现在支持跨多行继续的括号。您还可以在包含的组的末尾使用逗号。with(CtxManager1()asexample1,CtxManager2()asexample2,CtxManager3()asexample3,):...错误消息-NameErrors:当打印解释器引发的NameErrors时,PyErr_Display()将在引发异常的函数中提供类似的变量名称提案:PEP634结构模式匹配:模式匹配允许用户使用多个case语句进行匹配。在程序中执行match-case时,如果有匹配的语句,程序就会进入对应的case语句来执行操作。match-case语法和操作:模式匹配的一般语法是:matchsubject:case:case:case:case_:一个表达式公式,并将其值与作为一个或多个case块给出的连续模式进行比较。匹配案例示例如下:http_code="418"matchhttp_code:case"200":print("OK")do_something_good()case"404":print("NotFound")do_something_bad()case"418":print("I'mateapot')make_coffee()case_:print("Codenotfound")下图是match-case语句执行示意图,程序会检查几种case条件,根据变量中找到的值执行不同的动作http_code。同样,您可以使用一组if-elif-else语句来构建相同的逻辑:http_code="418"ifhttp_code="418":print("OK")do_something_good()elifhttp_code="404":print("NotFound")do_something_bad()elifhttp_code=="418"print("I'mateapot")make_coffee()else:print("Codenotfound")但是,通过使用match-case语句,重复执行http_code==被移除,http_code==在测试许多不同条件时使用match-case时看起来更清晰。我们可以通过一个简单的示例来了解模式匹配:使用C、Java或JavaScript(以及许多其他语言)中的switch语句将对象(数据对象)与文本(模式)匹配。switch语句通常用于将对象/表达式与包含文字的case语句进行比较。虽然使用嵌套if语句的一系列命令式指令可用于完成类似于结构模式匹配的任务,但它不如声明式方法清晰。相比之下,声明式方法声明匹配需要满足的条件,并且通过其显式模式更具可读性。虽然结构模式匹配可以以最简单的形式使用,将变量与case语句中的文本进行比较,但它对Python的真正价值在于它对对象类型和大小的处理。match-case可以说是本次Python3.10测试版的最大亮点。对于这个表情,有人喜欢,有人讨厌。在Python不支持switch-case之前,大家可能会使用字典进行相关操作。有人说switch除了易读没有其他优点;还有人说Python的闭包机制,dict的值可以是带闭包的函数,这使得表达能力比switch-case更好;但Python3.10beta版本加入了switch-case,为开发者提供了另一种选择。