Python模式匹配matchcase的实现

Written by

in

文章目录
  • 当程序需要针对一个变量的多种可能值进行判断时,传统的 if … elif … elif … else 结构会变得冗长且可读性较差。Python 3.10 引入了 match 语句(也称为模式匹配),它提供了一种更简洁、更直观的方式来处理多分支条件判断。
  • 功能:将一个目标(如变量)与一系列模式(case)进行比较,并执行第一个匹配成功的分支。 与传统if对比: if 写法 (冗长): score = ‘B’ if score == ‘A’: print(‘score is A.’) elif score == ‘B’: print(‘score is B.’) elif score == ‘C’: print(‘score is C.’) else: print(‘invalid score.’) match 写法 (清晰): score = ‘B’ match score: case ‘A’: print(‘score is A.’) case ‘B’: print(‘score is B.’) case ‘C’: print(‘score is C.’) case _: # `_` 是通配符,匹配任何值 print(‘invalid score.’) 关键点: – case _: 必须放在最后,用于捕获所有未被前面 case 匹配的情况,类似于 else。 语法结构更加规整,意图更明确。
  • match 的强大之处在于其灵活的匹配模式,远不止简单的相等判断。 带守卫条件的匹配:使用 if 在 case 内进行额外条件检查。 多值匹配:使用 | (或)来匹配多个值。 值绑定:在匹配的同时,将匹配到的值捕获到变量中。 示例: age = 15 match age: case x if x < 10: # 匹配所有小于10的值,并将其绑定到变量x print(f'< 10 years old: {x}’) case 10: # 精确匹配单个值 print(’10 years old.’) case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18: # 匹配多个值 print(’11~18 years old.’) case 19: print(’19 years old.’) case _: print(‘not sure.’)
  • match 语句可以匹配复杂的数据结构,如列表,并能进行解包操作,这使其功能非常强大。 示例:解析命令行参数 args = [‘gcc’, ‘hello.c’, ‘world.c’] # 模拟用户输入的命令 match args: # 模式1: 列表只包含一个元素’gcc’ case [‘gcc’]: print(‘gcc: missing source file(s).’) # 模式2: 列表第一个元素是’gcc’,第二个是任意值(绑定到file1),后面是0个或多个值(绑定到files) case [‘gcc’, file1, *files]: print(f’gcc compile: {file1}, {“, “.join(files)}’) # 模式3: 列表只包含一个元素’clean’ case [‘clean’]: print(‘clean’) # 默认情况 case _: print(‘invalid command.’) *files:这是一个通配符,它可以捕获列表中的零个或多个剩余元素。这使得匹配可变长度的列表变得非常简单。 工作原理:match 会按顺序尝试匹配每个 case 的模式。例如,对于 ['gcc', 'hello.c', 'world.c'],它会匹配第二个模式,并赋值 file1 = 'hello.c' 和 files = ['world.c']。
  • 为什么使用 match:替代冗长的 if-elif-else 链,极大地提高代码的可读性和简洁性,尤其是在处理多个枚举值或复杂数据结构时。 基本语法:使用 match TARGET: 和一系列 case PATTERN: 进行匹配。 强大功能: 精确匹配:case 'A': 或匹配:case 11 | 12 | 13: 守卫条件:case x if x < 10: 通配符:case _: (匹配任何值) 解包匹配:case ['cmd', arg1, *args]: (匹配并提取列表内容) 适用场景:处理状态码、命令解析、处理JSON或嵌套数据等任何需要多分支判断的场景。 match 语句是Python现代化的重要特性,掌握它可以让你的代码更加优雅和Pythonic。
  • hight = 1.50 weight = 50.5 bmi = weight / hight ** 2 print(“bmi=”, bmi) match bmi: case _ if bmi < 18.5: print(“过轻”) case _ if 18.5 <= bmi < 25: print(“正常”) case _ if 25 <= bmi < 28: print(“过重”) case _ if 28 <= bmi < 32: print(‘肥胖’) case _: print(“严重肥胖”) 到此这篇关于Python模式匹配match case的实现的文章就介绍到这了,更多相关Python模式匹配match case内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python中match…case模式匹配结构实现 Python条件语句match-case的具体使用 python之流程控制语句match-case详解 Python3.10中match-case的用法和示例详解 深入理解最新Python中的Match Case
  • 目录
    • 核心概念
    • 1. 基本match语句
    • 2. 复杂匹配模式
    • 3. 高级应用:匹配列表(解包匹配)
    • 总结要点
    • 将之前的练习题 重新写一写

    当程序需要针对一个变量的多种可能值进行判断时,传统的 if ... elif ... elif ... else 结构会变得冗长且可读性较差。Python 3.10 引入了 match 语句(也称为模式匹配),它提供了一种更简洁、更直观的方式来处理多分支条件判断。

    • 功能:将一个目标(如变量)与一系列模式(case)进行比较,并执行第一个匹配成功的分支。
    • 与传统if对比
      • if 写法 (冗长):
        score = 'B'
        if score == 'A':
            print('score is A.')
        elif score == 'B':
            print('score is B.')
        elif score == 'C':
            print('score is C.')
        else:
            print('invalid score.')
        
      • match 写法 (清晰):
        score = 'B'
        match score:
            case 'A':
                print('score is A.')
            case 'B':
                print('score is B.')
            case 'C':
                print('score is C.')
            case _: # `_` 是通配符,匹配任何值
                print('invalid score.')
        
    • 关键点case _: 必须放在最后,用于捕获所有未被前面 case 匹配的情况,类似于 else
      • 语法结构更加规整,意图更明确。

    match 的强大之处在于其灵活的匹配模式,远不止简单的相等判断。

    • 带守卫条件的匹配:使用 ifcase 内进行额外条件检查。
    • 多值匹配:使用 | (或)来匹配多个值。
    • 值绑定:在匹配的同时,将匹配到的值捕获到变量中。

    示例

    age = 15
    
    match age:
        case x if x < 10:         # 匹配所有小于10的值,并将其绑定到变量x
            print(f'< 10 years old: {x}')
        case 10:                  # 精确匹配单个值
            print('10 years old.')
        case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18: # 匹配多个值
            print('11~18 years old.')
        case 19:
            print('19 years old.')
        case _:
            print('not sure.')
    

    match 语句可以匹配复杂的数据结构,如列表,并能进行解包操作,这使其功能非常强大。

    示例:解析命令行参数

    args = ['gcc', 'hello.c', 'world.c'] # 模拟用户输入的命令
    
    match args:
        # 模式1: 列表只包含一个元素'gcc'
        case ['gcc']:
            print('gcc: missing source file(s).')
    
        # 模式2: 列表第一个元素是'gcc',第二个是任意值(绑定到file1),后面是0个或多个值(绑定到files)
        case ['gcc', file1, *files]:
            print(f'gcc compile: {file1}, {", ".join(files)}')
    
        # 模式3: 列表只包含一个元素'clean'
        case ['clean']:
            print('clean')
    
        # 默认情况
        case _:
            print('invalid command.')
    
    • *files:这是一个通配符,它可以捕获列表中的零个或多个剩余元素。这使得匹配可变长度的列表变得非常简单。
    • 工作原理match 会按顺序尝试匹配每个 case 的模式。例如,对于 ['gcc', 'hello.c', 'world.c'],它会匹配第二个模式,并赋值 file1 = 'hello.c'files = ['world.c']

    1. 为什么使用 match:替代冗长的 if-elif-else 链,极大地提高代码的可读性和简洁性,尤其是在处理多个枚举值或复杂数据结构时。
    2. 基本语法:使用 match TARGET: 和一系列 case PATTERN: 进行匹配。
    3. 强大功能
      • 精确匹配case 'A':
      • 或匹配case 11 | 12 | 13:
      • 守卫条件case x if x < 10:
      • 通配符case _: (匹配任何值)
      • 解包匹配case ['cmd', arg1, *args]: (匹配并提取列表内容)
    4. 适用场景:处理状态码、命令解析、处理JSON或嵌套数据等任何需要多分支判断的场景。

    match 语句是Python现代化的重要特性,掌握它可以让你的代码更加优雅和Pythonic。

    hight = 1.50
    weight = 50.5
    bmi = weight / hight ** 2
    print("bmi=", bmi)
    
    match bmi:
        case _ if bmi < 18.5:
            print("过轻")
        case _ if 18.5 <= bmi < 25:
            print("正常")
        case _ if 25 <= bmi < 28:
            print("过重")
        case _ if 28 <= bmi < 32:
            print('肥胖')
        case _:
            print("严重肥胖")
    

    到此这篇关于Python模式匹配match case的实现的文章就介绍到这了,更多相关Python模式匹配match case内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python中match…case模式匹配结构实现
    • Python条件语句match-case的具体使用
    • python之流程控制语句match-case详解
    • Python3.10中match-case的用法和示例详解
    • 深入理解最新Python中的Match Case

    站内搜索