问题标签 [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 投票
4 回答
2109 浏览

python - Python 结构模式匹配

我无法运行此代码:

match我在 Python 中找不到关键字。

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

任何想法?

0 投票
5 回答
7094 浏览

python - 如何使用存储在变量中的值作为案例模式?

我试图理解 Python 3.10 中新的结构模式匹配语法。我知道可以匹配这样的文字值:

但是,如果我重构并将这些值移动到模块级变量,则会导致错误,因为这些语句现在表示结构或模式而不是值:

有没有办法使用 match 语句来匹配存储在变量中的值?

0 投票
1 回答
81 浏览

python - 如何用结构模式匹配表达 hasattr() 鸭子类型逻辑?

我有通过查找属性来检查命名元组数据类的代码:_fields

如何使用 Python 3.10 的匹配/大小写结构模式匹配来表达这一点?

0 投票
1 回答
753 浏览

python - 将多个 isinstance 检查转换为结构模式匹配

我想将此现有代码转换为使用模式匹配:

您如何编写带有模式匹配的isinstance检查,以及如何同时针对多种可能的类型进行测试(float, Decimal)

0 投票
1 回答
1031 浏览

python - 捕获使剩余模式无法访问

为什么此代码失败:

它生成此错误消息:

该错误消息是什么意思,如何修复代码以使其正常工作?

0 投票
1 回答
60 浏览

python - 如何将模式匹配用于针对 JSON 或 JSON 行的 SQL 样式查询

JSONJSON 行形式的数据开始,我想使用结构模式匹配对其运行查询。

例如,运行 json.load() 后,我得到一个结构如下的字典:

我想要做的是应用 Python 3.10 的结构模式匹配提取相关数据,就像使用这个 SQL 查询一样:

0 投票
1 回答
154 浏览

python - 避免结构模式匹配中的意外捕获

在使用模式匹配时,这个例子被讨论为可能的“陷阱”:

这是使用结构模式匹配意外捕获的示例。它给出了这个意外的输出:

同样的问题以其他形式出现:

在这个例子中,str需要有括号,str(). 没有它们,它会“捕获”并将str内置类型替换为x的值。

是否有一种防御性编程实践可以帮助避免这些问题并提供早期检测?

0 投票
1 回答
269 浏览

python - 有没有办法使用 python 的“匹配”语句来测试 Iterable 是否包含模式?

这与新的 Python 3.10 beta 和新match语法有关。有没有办法检查一个模式是否简单地包含在一个迭代中?最明显的解决方案是简单地将两个通配符放在两边,但这会引发 aSyntaxError由于来自可迭代解包的解包语法。

有没有办法做到这一点?注意:在示例中使用诸如包装类之类的东西numbers 会很好,只要它使用匹配块并且至少具有一定的可读性,但我已经尝试过这个并且没有太大的成功

例子:

0 投票
1 回答
251 浏览

python - 结构模式匹配 Python - 匹配集合 / Frozenset

我一直在玩 Python 3.10 中的结构模式匹配,但不知道如何让它匹配一个集合。例如我试过:

我试过了:

也:

我猜有一种方法可以做到这一点,因为我们可以匹配其他对象,而我只是缺少正确的语法,但我想不出还有什么可以尝试的。任何帮助,将不胜感激!谢谢!

0 投票
1 回答
89 浏览

python - 如果先前未定义变量,为什么匹配案例语句会分配给其中一种情况中使用的变量?

在学习 Python 10 中引入的模式匹配时,我遇到了一个示例,其中一部分拆分字符串被分配/绑定到其中一种情况下使用的变量。

第二种情况有先前未声明的变量cmd,它最终被赋值"dir"