Python 3.10 匹配/大小写与常量[重复]

2024-02-27

我尝试用更短的代码块替换 if/elif/elif/.../else 代码块match/case从 Python 3.10 开始。 我定义了三个常量,并希望对每个常量执行不同的操作,因此我的代码大致如下所示:

>>> const_a = 1
>>> const_b = 2
>>> const_c = 3
>>> interface = const_b  # example
>>> match interface:
...     case const_a:
...             print("case a")
...     case const_b:
...             print("case b")
...     case const_c:
...             print("case c")

但是,运行这段代码时,会出现异常:

File "<stdin>", line 2
SyntaxError: name capture 'const_a' makes remaining patterns unreachable

我究竟做错了什么?


The match...case不仅仅是一个switch...case. From https://www.python.org/dev/peps/pep-0622/#patterns https://www.python.org/dev/peps/pep-0622/#patterns:

  • A capture模式看起来像 x 并且相当于一个相同的赋值目标:它总是匹配并绑定具有给定(简单)名称的变量。
  • A 恒定值模式的工作方式与文字类似,但适用于某些命名常量。请注意,考虑到捕获模式可能存在歧义,它必须是限定(点)名称。它看起来像 Color.RED 并且仅匹配等于相应值的值。它永远不会绑定。

因此,您必须创建一个将这些变量作为属性的对象,并在匹配中使用限定名称

import types

consts = types.SimpleNamespace()
consts.A = 1
consts.B = 2
consts.C = 3

interface = 2

match interface:
    case consts.A:
        print("A")
    case consts.B:
        print("B")
    case consts.C:
        print("C")

正如预期的那样,打印B

欲了解更多信息why, see https://www.python.org/dev/peps/pep-0622/#alternatives-for-constant-value-pattern https://www.python.org/dev/peps/pep-0622/#alternatives-for-constant-value-pattern

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 3.10 匹配/大小写与常量[重复] 的相关文章

随机推荐

  • ASP.NET 身份二要素不起作用 - Cookie 问题?

    背景 我一直在使用Identity Sample微软团队提供的项目here http www asp net identity overview features api two factor authentication using sm
  • 如何将图像中的字符和单词分割成轮廓

    我有一些轮廓图像 我想对其进行分割 这基本上意味着我想将轮廓图像中的所有字符保存到单独的图像中 但我得到了几张噪声图像以及所需的输出 我想知道如何在不影响所需输出的情况下去除所有噪声图像 我试图改变价值观w and h 这样我就可以最大限度
  • 如何使用 Firebug 扩展调试 Greasemonkey 脚本?

    我没有找到使用 Firebug 扩展调试 Greasemonkey 脚本的方法 有谁知道如何做到这一点 Thanks 更新者 Mene S human 修复现在已被 Firefox 30 和 Firebug 2 破坏 Firefox 31m
  • 带 dom-repeat 的 Polymer 1.0 动态模板

    我有一个场景 我想创建动态template将与 Polymer 一起使用的元素dom repeat 我当前的原型如下 JSbin演示 http jsbin com hitotahoqe edit js output var domRepea
  • org.openqa.selenium.NoSuchElementException:尝试通过 CssSelector 定位 card-fields-iframe 时,返回的节点 (null) 不是 DOM 元素

    我正在尝试通过部分 id 来定位 iframe 对于这个方法 我使用了 driver switchTo frame driver findElement By cssSelector iframe id card fields number
  • Java计算MD5哈希值

    In http www anyexample com programming java java simple class to compute md5 hash xml http www anyexample com programmin
  • FireFox 中内容可编辑的光标位置/样式

    我在 FireFox 3 中使用 contentEditable 时遇到问题 我遇到的问题是 在单击 div 后 光标将出现在 div 上方或仅部分出现在 div 中 直到我开始输入 此时它的行为正确 关于如何阻止这种情况发生有什么想法吗
  • 为什么在 exec() 之前调用 quit() 不会退出应用程序?

    为什么这个程序可以正常运行并显示主窗口 我希望它会退出quit 在构造函数中调用 主要 cpp include
  • Qt 5.0程序在QtCreator中运行但不在外部运行

    这是上下文 我在Windows 7 x64下用Qt开发了一个程序 我已经升级到Qt 5 0 1 QtCreator 2 6 1 编译器VS2010 现在状态 我的程序在 QtCreator 中运行良好 但是当我在外面尝试时 我收到了几个错误
  • 在 Swift 中向 NSLayoutAnchor 约束添加乘数

    锚约束简化了添加约束的过程 但故事板中可用的乘数属性似乎并不适用于所有类型的约束 例如 作为根据这里的答案 https stackoverflow com questions 63042059 center uilabel created
  • 使用 awk 删除包含唯一第一个字段的行?

    希望仅打印具有重复第一个字段的行 例如从看起来像这样的数据 1 abcd 1 efgh 2 ijkl 3 mnop 4 qrst 4 uvwx 应该打印出 1 abcd 1 efgh 4 qrst 4 uvwx 仅供参考 我的数据中第一个字
  • hadoop/bin/hadoop 没有示例 jar

    我安装了 hadoop 2 2 0 并尝试运行示例 wordcount 程序 为此 我首先使用以下命令将数据导入到 hdfs bin hadoop fs copyFromLocal home prassanna Desktop input
  • FileBeat 收获问题

    我们使用 ELK 来控制我们的程序日志 在我们的 FileBeat 配置中 我们从中获取30种不同包含每秒更新的文件的路径 它仅在产品机器中每秒更新 在其他开发机器中 我们的日志要少得多 我们的日志文件不会被删除 直到它们变旧并且我们停止使
  • Indy 和 smtps:无法连接

    我正在尝试使用 Indy 和说明的技术从 smtps 安全 smtp 发送电子邮件在 Marco Cant 的这篇文章中 http www marcocantu com tips oct06 gmail html 这就是我正在使用的 obj
  • 在 SciKit 线性回归上出现“ValueError:形状未对齐”

    一般来说 SciKit 和 Python 的线性代数 机器学习相当新 所以我似乎无法解决以下问题 我有一个训练集和一个测试数据集 其中包含连续值和离散 分类值 CSV 文件被加载到 Pandas DataFrame 中并匹配形状 分别为 1
  • 初始化列表与向量

    在 C 11 中 可以使用初始化列表来初始化函数中的参数 其目的是什么 不能用 const 向量做同样的事情吗 下面两个程序有什么区别 使用初始化列表 include
  • Apache Beam 计数器/指标在 Flink WebUI 中不可用

    我正在使用 Flink 1 4 1 和 Beam 2 3 0 并且想知道是否可以在 Flink WebUI 或任何地方 中提供可用的指标 如 Dataflow WebUI 中那样 我用过类似的计数器 import org apache be
  • 数据库操作的任务与服务

    JavaFX 8 任务和服务之间有什么区别 在哪种情况下使用其中一个更好 数据库操作用什么比较好 任务和服务之间的主要区别 一次性执行与重复执行 A Task http docs oracle com javafx 2 api javafx
  • C 中的布谷鸟哈希

    有没有人有实施布谷鸟哈希 http en wikipedia org wiki Cuckoo hashing在C语言中 如果有一个开源的非 GPL 版本那就完美了 既然 Adam 在评论中提到了它 有人知道为什么它没有被太多使用吗 这只是一
  • Python 3.10 匹配/大小写与常量[重复]

    这个问题在这里已经有答案了 我尝试用更短的代码块替换 if elif elif else 代码块match case从 Python 3 10 开始 我定义了三个常量 并希望对每个常量执行不同的操作 因此我的代码大致如下所示 gt gt g