天天看点

python最新语法match匹配模式题目

作者:SuperOps
python最新语法match匹配模式题目

题目说明

题目如图,运行环境python3.10

A)  This list has TWO items
B) 5 5
C) Something else
D) 9 7
E) None of the abpve           

答案是 E. 以上都不对。

实际输出是:

This list has TWO items!
9 7           

题目解说

这个问题涉及到 Python 3.10 中引入的模式匹配特性。脚本使用 match 语句来匹配所提供的序列中的模式。

函数 matcher​ 接受一个名为 sequence​ 的参数。在函数内部,两个变量 a​ 和 b​ 被初始化为值 5​。

match​ 语句用于匹配 sequence​ 和不同的模式。模式按照定义的顺序进行检查。

当使用 matcher([9, 7])​ 调用函数时,序列 [9, 7]​ 会与模式进行匹配。

第一个模式检查序列是否为空列表。由于 [9, 7]​ 不是空的,所以这个模式被跳过。

第二个模式检查序列是否只有一个项,并将这个项赋值给变量 a​。由于序列有两个项,所以这个模式也被跳过。

第三个模式检查序列是否有两个项,并将这两个项分别赋值给变量 a​ 和 b​。这个模式匹配了,所以相应的代码块被执行。此代码块内的打印语句输出了"This list has TWO items!"。

Python 中模式匹配的行为允许绑定名称。在第三个模式中,变量 a​ 和 b​ 被绑定到分别对应的值 9​ 和 7​。这就是为什么后续的打印语句输出了 9 7​。

第四个模式是通配符模式,表示匹配任何没有匹配前面模式的序列。然而,由于我们的序列已经匹配了第三个模式,这个代码块不会被执行。

总结起来,输出 "这个列表有两个项!" 是因为序列 [9, 7]​ 匹配了第三个模式。然后,值 9​ 和 7​ 被绑定到变量 a​ 和 b​,并在下一条语句中打印出来。

python3.10 match语法回顾

当谈到 Python 3.10 的新特性时,match 语法无疑是一个备受关注的亮点。match 语法为开发者提供了一种简单而强大的模式匹配方式,使代码编写更加简洁、易读。下面我们将介绍 match 语法的各种用法,并附带代码示例,帮助你更好地理解和应用这一新特性。

基本模式匹配:

  • 匹配常量模式:使用常量值进行匹配。
match value:
    case 1:
        # 执行匹配到常量值为1的代码
    case 2:
        # 执行匹配到常量值为2的代码
    case _:
        # 执行其他情况的代码           
  • 匹配变量模式:使用变量进行匹配,并将匹配结果绑定到变量。
match value:
    case 'apple':
        # 执行匹配到值为'apple'的代码
    case fruit:
        # 执行匹配到其他变量值的代码,并使用变量名进行引用           
  • 匹配类型模式:使用类型进行匹配,可以是内置类型或自定义类型。
match value:
    case int:
        # 执行匹配到整数类型的代码
    case str:
        # 执行匹配到字符串类型的代码
    case Point(x, y):
        # 执行匹配到自定义类型 Point 的代码,并提取 x 和 y 坐标           
  • 使用 or 关键字进行模式组合,匹配任一模式即可。
match value:
    case 1 or 2:
        # 执行匹配到值为1或2的代码
    case 'apple' or 'orange':
        # 执行匹配到值为'apple'或'orange'的代码           
  • 使用 and 关键字进行模式组合,同时匹配多个模式。
match value:
    case int and value > 0:
        # 执行匹配到正整数的代码
    case str and len(value) > 5:
        # 执行匹配到长度大于5的字符串的代码           
  • 使用 as 关键字进行模式组合,同时绑定变量并进行匹配。
match value:
    case Point(x as 0, y):
        # 执行匹配到 x 值为0的 Point 类型的代码,并提取 y 坐标
    case Point(x, y as 0):
        # 执行匹配到 y 值为0的 Point 类型的代码,并提取 x 坐标           
  • 在模式匹配中添加额外的条件判断。
match value:
    case int and value > 0 if condition:
        # 执行匹配到满足条件的正整数的代码
    case str and len(value) > 5 if condition:
        # 执行匹配到满足条件的长度大于5的字符串的代码           
  • 列表模式匹配:匹配列表中元素的模式
match value:
    case [1, 2, 3]:
        # 执行匹配到列表为 [1, 2, 3] 的代码
    case [1, x, 3]:
        # 执行匹配到列表中间元素为 x 的代码
    case [1, *_]:
        # 执行匹配到以1开头的列表的代码,并忽略后续元素           
  • 元组模式匹配:匹配元组中的模式。
match value:
    case (1, 2):
        # 执行匹配到元组为 (1, 2) 的代码
    case(1, x):
        # 执行匹配到元组第一个元素为1,第二个元素为 x 的代码
    case (1, *_):
        # 执行匹配到以1开头的元组的代码,并忽略后续元素           
  • 自定义类型模式匹配:匹配自定义类型的模式。
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

match value:
    case Point(0, 0):
        # 执行匹配到坐标为 (0, 0) 的 Point 类型的代码
    case Point(x, y):
        # 执行匹配到任意坐标的 Point 类型的代码,并提取 x 和 y 坐标           
  • 内置类型模式匹配:匹配内置类型的模式。
match value:
    case int as num:
        # 执行匹配到整数类型的代码,并将值绑定到 num 变量
    case str as text:
        # 执行匹配到字符串类型的代码,并将值绑定到 text 变量           

这些示例覆盖了 match 语法的基本用法和一些常见的模式匹配技巧。通过灵活运用这些特性,你可以简化代码,并提高代码的可读性和可维护性。记得在实际应用中结合具体场景和需求,发挥 match 语法的优势。

了解更多python实用技巧,可以进入我的技术专栏了解更多python有用的知识点