问题标签 [structural-pattern-matching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
271 浏览

python - Point() 接受 0 个位置子模式(给定 2 个)

我正在尝试从 docs运行一个示例,但出现错误:

有人可以解释我在这里做错了什么吗?

0 投票
2 回答
118 浏览

python - 如何使用结构模式匹配检测可散列类型?

使用结构模式匹配,如何编写匹配可散列类型实例的案例?

我试过了:

但是,这得到了错误的答案,因为每种类型都定义__hash__了它是否是可散列的:

0 投票
1 回答
97 浏览

python - Python的结构模式匹配中如何区分元组和列表?

我想使用 Python 的结构模式匹配来区分元组(例如表示一个点)和元组列表。

直截了当的方法不起作用:

输出:

而我希望它输出:

切换 case 语句的顺序在这里也无济于事。

用模式匹配解决这个问题的好方法是什么?

0 投票
0 回答
43 浏览

python - 你可以重载匹配运算符吗?

python中有许多可以重载的运算符(例如+)。但是通过 python 3.10 和PEP 622的文档,我想知道是否可以为match操作员做同样的事情(例如,简化对象的表示) - 还是通过__match_args__属性来完成?

0 投票
2 回答
49 浏览

python - 无法在案例模式中减去?

我正在尝试在 Python shell 中使用 Python 3.10 结构模式匹配:

输入第二行后,它给了我以下错误:

注意:我知道在 之后没有要执行的代码case,我在 shell 中执行此操作,它会立即引发此错误。
另外,我知道我可以按照这个答案存储它们,但如果有办法,我宁愿直接这样做。

0 投票
1 回答
87 浏览

python - 使用正则表达式的结构模式匹配

我有一个字符串,我正在尝试针对一些正则表达式模式进行验证,我希望因为模式匹配在 3.10 中可用,我可以使用它而不是创建一个 if-else 块。

考虑一个可能值为 1021102、1.25.32、string021 的字符串“validateString”。

我尝试的代码如下所示。

对于正则表达式 1、2 和 3,我尝试了字符串正则表达式模式以及 re.compile 对象,但它似乎不起作用。

我一直试图在互联网上找到这方面的例子,但似乎找不到任何涵盖正则表达式模式匹配与新的 python 模式匹配的例子。

关于如何使它工作的任何想法?

谢谢!

0 投票
2 回答
128 浏览

python - 如何使用 python 的结构模式匹配来测试内置类型?

我正在尝试使用 SPM 来确定某个类型是 anint还是str.

以下代码:

返回https://en.meming.world/images/en/0/03/I%27ve_Never_Met_This_Man_In_My_Life.jpg

我发现的大多数文档都讨论了如何测试某个变量是否是某个类型的实例。但不是如何测试一个类型是否属于某种类型。

关于如何使其工作的任何想法?

0 投票
1 回答
60 浏览

python - 结构模式匹配和无穷大

我正在计算非负p的Lp距离函数。对于除p = 0 和p = ∞ 之外的所有情况,内置函数都可以很好地发挥作用。在了解结构模式匹配之前,我使用过字典和异常处理:pow()

有些人不希望这里有例外。因此,我将片段重写为以下片段:

为什么case inf:不正确(Python v3.10.2)?

0 投票
0 回答
17 浏览

python - 在 Python 中使用模式匹配进行安全索引

我有一个巨大的单词列表corpus和一个特定的单词ww我知道语料库中每次出现的索引。我想查看每次出现的n大小窗口,w并创建一个包含该窗口中出现的其他单词的字典。int字典是从到的映射,list[str]其中键是距离我的目标词多少个位置,向左(负)或向右(正),值是该位置的单词列表。

例如,如果我有语料库["I", "made", "burgers", "Jack", "made", "sushi"]:我的话是"made",我正在看一个大小的窗口1,然后我最终想返回{-1: ["I", "Jack"], 1: ["burgers", "sushi"]}

可能会出现两个问题。我的窗口可能超出范围(如果我在上面的示例中查看大小为 2 的窗口)并且我可以在该窗口中多次遇到相同的单词,这是我想忽略的情况。我编写了以下似乎可行的代码,但我想让它更干净

有没有办法合并选项和模式匹配,以便我可以删除 try 块并拥有类似的东西......

0 投票
0 回答
16 浏览

python - 结构模式匹配:将类型对象与某个类匹配

我想写一个模式匹配块来检测被匹配的对象是type/class 对象,例如,int还是str. 不是这些的实例,而是实际的类对象 intstr.

这是一个SyntaxError

怎么做?

更新,以下不起作用,但SyntaxError至少解决了:

(错误结果x is str:)

更新:问题是裸intorstr是一个捕获模式并记下一个值模式。名称intorstr将与裸case int:or绑定case str:。你必须使用点符号来使它不被捕获。

这有效:

对于非内置,您必须执行以下操作: