Python结构模式匹配

2024-04-23 14:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法运行此代码:

match shape:
    case Point(x, y):
        ...
    case Rectangle(x, y, _, _):
        ...
print(x, y)

我在Python中找不到match关键字

我在这里找到的:https://www.python.org/dev/peps/pep-0622/#the-match-statement

有什么想法吗


Tags: the代码httpsorgdevwwwmatch关键字
3条回答

截至2021年3月,结构模式匹配不仅正式接受,而且在最新的alpha和Python 3.10开发版本中也可用。上周我写了一篇文章"Get started with Pattern Matching in Python, today!"详细介绍了如何实现这一目标,但我将在这里做一个简短的回顾

通过pyenv安装3.10-dev/a6

首先确保已经安装并设置了pyenv。在这一点上,简单地做

pyenv install 3.10-dev

您现在可以在本地激活测试版并运行解释器

pyenv local 3.10-dev
python
Python 3.10.0a6+ (heads/master:87f649a409, Mar 11 2021, 16:29:20) [Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

通过docker容器运行

如果您不想让3.10直接在本地系统中运行,也可以使用docker。新的alpha 6已经启动,3.10.0a6解释器可以在这样的容器中轻松启动

docker run -it python:3.10.0a6-buster

这就是在python中使用/测试新结构模式匹配的两种不同方法

注意:这仍然是早期版本,完成的版本将在10月份提供,因此暂时不要在此功能上构建生产堆栈。但是如果你想用未来的概念做实验,你可以今天就做

更新2021-04-19:Python 3.10将introduce a structural pattern matching。有关这方面的更多详细信息,请参阅其他优秀答案

您所指的源代码是一个PEP(Python增强建议),它还没有在一个稳定的版本中实现。此外,政治公众人物已被PEP634取代

截至2021年初,发布的Python版本中不存在match关键字<;=3.9.

由于Python在其他语言中没有任何类似于switch/case的功能,因此通常使用嵌套的if/elif/else语句或字典

这是一个基于你的问题的例子,尽管我现在还不清楚你想要实现什么


class Point:
   def __init__(self, x, y):
       pass

class Rectangle:
   def __init__(self, x1, y1, x2=0, y2=0):
       pass

shapes = dict(
    point=Point,
    rectangle=Rectangle,
)

my_obj = shapes['point'](x, y)

PEP 634PEP 635PEP 636是尚未接受并随后实施的Python增强建议中的三个

这意味着它只是一个概念证明,请求者希望在未来看到它,但它尚未开发出来。此外,也没有人能保证这一点,政治公众人物更倾向于一厢情愿

相关问题 更多 >