当前位置: 首页 > news >正文

python 中match...case 和 C switch case区别

文章目录

      • 语法结构
      • 匹配模式的灵活性
      • 穿透特性
      • 缺省情况处理

在 Python 3.10 及以后的版本中引入了 match...case 语句,它和其他编程语言里的 switch...case 语句有相似之处,但也存在不少区别,

语法结构

  • match...case(Python)
    • match 语句后面紧跟一个需要匹配的表达式,然后通过一系列 case 子句来定义匹配模式和对应的操作。case 子句可以使用多种模式,如常量、变量、序列、映射等。
    • 示例代码如下:
def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 401 | 403:
            return "Not allowed"
        case 404:
            return "Not found"
        case _:
            return "Something else"


print(http_error(404))
  • switch...case(以 C 语言为例)
    • switch 后面是一个控制表达式,通常是整数类型或者枚举类型。case 子句后面只能跟常量表达式,用于和控制表达式的值进行比较。每个 case 子句结束时一般需要使用 break 语句来跳出 switch 结构,否则会发生穿透现象。
    • 示例代码如下:
#include <stdio.h>

void http_error(int status) {
    switch (status) {
        case 400:
            printf("Bad request\n");
            break;
        case 401:
        case 403:
            printf("Not allowed\n");
            break;
        case 404:
            printf("Not found\n");
            break;
        default:
            printf("Something else\n");
    }
}

int main() {
    http_error(404);
    return 0;
}

匹配模式的灵活性

  • match...case(Python)
    • 具有非常高的灵活性,支持多种复杂的匹配模式。除了常量匹配,还能进行序列匹配、映射匹配、类型匹配等。
    • 示例代码如下:
def describe_person(person):
    match person:
        case {"name": name, "age": age} if age < 18:
            return f"{name} is a minor."
        case {"name": name, "age": age}:
            return f"{name} is an adult."
        case _:
            return "Unknown input."


print(describe_person({"name": "Alice", "age": 25}))
  • switch...case(其他语言)
    • 匹配模式相对受限,一般只能进行常量值的比较,无法像 Python 的 match...case 那样进行复杂的模式匹配。

穿透特性

  • match...case(Python)
    • 不存在穿透现象。当某个 case 子句匹配成功后,会执行该子句下的代码块,然后直接跳出 match 语句,不会继续执行后续的 case 子句。
  • switch...case(其他语言)
    • 若没有使用 break 语句,会发生穿透现象,即匹配成功一个 case 子句后,会继续执行后续 case 子句的代码,直到遇到 break 或者 switch 语句结束。

缺省情况处理

  • match...case(Python)
    • 使用 case _ 来表示缺省情况,类似于其他语言中的 default 子句。当所有 case 子句都不匹配时,会执行 case _ 子句下的代码。
  • switch...case(其他语言)
    • default 子句来处理缺省情况,当控制表达式的值与所有 case 子句中的常量都不匹配时,会执行 default 子句下的代码。

综上所述,Python 的 match...case 语句在语法和功能上都更加灵活强大,能够处理复杂的匹配需求,而传统的 switch...case 语句则相对简单,主要用于常量值的比较。

相关文章:

  • 数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server)
  • Linux开机、重启与用户登录注销全解析
  • C++之模板二番战
  • Spring Boot事件机制详解
  • 【STM32】知识点介绍一:硬件知识
  • 画一个分布式系统架构图,标注服务注册、网关、熔断
  • python中的demjson包介绍
  • docker-dockerfile书写
  • 从JVM底层揭开Java方法重载与重写的面纱:原理、区别与高频面试题突破
  • 【性能优化点滴】odygrd/quill 中的冷热属性宏
  • Android Audio基础(13)——audiomixer
  • MySQL里的锁有哪些
  • Python现代化依赖管理全攻略
  • 分布式理论:CAPBASE理论
  • SpringBoot+策略模式+枚举类,使用配置文件改进,优雅消除if-else,完全符合OOP原则
  • nVisual对接企业微信实现机房设备与连接变更的自动化审批
  • 计算机网络--第四章 网络层(2)
  • Spring-Mybatis框架常见面试题
  • 华为云 对象存储服务 OBS | 架构分析与应用场景
  • 夯实 kafka 系列|第二章:kafka 常用参数配置
  • 张永宁任福建宁德市委书记
  • 海南医科大披露校内竞聘上岗结果:32名干部离开领导岗位,8人系落选
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:机器人行业没包袱,很多事都能从零开始
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区
  • 马上评|文玩字画竞拍轻松赚差价?严防这类新型传销
  • 国家卫健委通报:吊销肖某医师执业证书,撤销董某莹四项证书