Python可能会获得模式匹配语法



Python语言的创建者正在考虑一项新建议PEP 622,该建议最终将为Python提供模式匹配语句语法。新的模式匹配语句将为Python程序员提供处理结构化数据的更多表达方式,而不必求助于变通方法。 模式匹配是许多编程语言的共同特征,例如C中的switch / case。
它允许基于给定变量或表达式的值采取多种可能的动作之一。尽管Python缺乏用于模式匹配的本机语法,但可以使用if / elif / else链或字典查找对其进行仿真。 PEP 622提出了一种使用匹配/大小写语法将表达式与多种模式匹配的方法: 符合条件:案例0 | 1 | 2:print(“ Small number”)case [] | [_]:print(“ A short sequence”)case str()| bytes():print(“类似字符串的东西”)case _:print(“其他字符串的东西”)支持的模式匹配类型包括文字,名称,常量值,序列,映射(基本上是键值对的存在)在表达式中),类,上述内容的混合物或任何这些加上条件表达式。
任何含糊不清或无法解析的匹配项将在运行时引发异常。 对象可以通过称为__match__协议的新协议来处理匹配测试。如果对象实现__match__方法,则可以使用该对象测试它是否匹配给定的类模式并返回适当的响应。
PEP 622也将允许静态类型检查器验证是否可以验证匹配。用于类的新@sealed装饰器指示类型检查器,该类的任何子类都在与基类相同的模块中定义。 由于缺乏受欢迎的支持,先前添加模式匹配的PEP(分别在2001年和2006年提出的PEP 275和PEP 3103)被拒绝。
PEP 3103由Python的创建者Guido van Rossum起草。由van Rossum和其他一些人撰写的新PEP旨在提供用于对象匹配的正则表达式,而不仅仅是简单的if / elif / else替代品。作者注意到,该PEP的许多方面都受到了Rust和Scala中模式匹配的工作方式的启发。
如何在引擎盖下实现所有这些仍有待讨论。 PEP 622中提出的实现将生成与if / elif / else链相同的字节码序列。取决于每种情况中包含多少条件逻辑,更大的开关/案例块的性能可能会降低。 br> 即使PEP最终被接受,有关它的很多事情也可能会改变。可能会遇到问题的一个问题是使用案例_:而不是其他情况:作为switch语句的最终包罗万象的条款。 _在许多情况下都用作临时变量,单方面覆盖其行为可能会给开发人员带来麻烦。

Yorumlar

Bu blogdaki popüler yayınlar

只需50美元即可训练成为一名熟练的Python编码器

DataStax 使 Astra 流媒体服务普遍可用

TypeScript 4.1 Beta带来了模板文字类型