zoukankan      html  css  js  c++  java
  • python3.10 新增的 match case 语句

    python 3.10 新增的 math case 语句

    python 3.10 中新加了一个匹配语句,类似于其他如Java中的 switch... case... ,它可以方便的匹配你想要的内容。可以作为一部分 if...elif...else 的替代品,并且减少代码量。

    下面是一个使用 match...case...if...elif...else 的对比,两者做的事情相同。

    # if else
    names = ['zhao', 'qian', 'sun', 'slsls']
    for name in names:
        if name == 'zhao':
            print('赵')
        elif name == 'qian':
            print('钱')
        elif name == 'sun':
            print('孙')
        else:
            print('未知姓氏')
    
    # match case
    for name in names:
        match name:  # match 后面跟要匹配的对象
            case 'zhao':  # 一旦某个 case 匹配上了,不会继续执行下面的其他 case
                print('赵')
            case 'qian':
                print('钱')
            case 'sun':
                print('孙')
            case _:  # _ 捕获其他未涵盖的情况
                print('未知姓氏')
    

    简单教程:

    官方教程链接

    1. 匹配序列

    a = [1, 2, 3]
    match a:
        case [1]:
            print("匹配 [1]")
        case [1, obj]:
            print("匹配长度为2的列表,且列表的第一个元素是1,第二个元素不限,并用 obj 作为第二个元素的别名,若能匹配上,可以通过obj变量获取第二个元素内容", obj)
        case [1, *obj]:
            print("匹配长度大于等于1的列表,且列表第一个元素是1,后面可以有多个元素,也可以没有任何元素", obj)
        case [1, (2|3), 3]:
            print("| 代表 or;(2|3)代表列表的第二个元素要么是2,要么是3")
        case [1, (2|3) as second, 3]:
            print("和上一个一样,只不过给第二个元素绑定了一个别名:second,如果匹配上,可以通过 second 变量获取第二个元素", second)
        case [1, 2] | [1, 2, 3]:
            print('匹配 [1,2] or [1,2,3]')
        case [1, second, 3] if second == 2:
            print('带有限制条件的匹配,后面的 if 条件满足了,才会进行匹配')
        case _:
            print('_ 代表匹配其他情况,类似于 if...else.. 语句中的 else')
    
    

    2. 匹配对象

    class A(object):
        def __init__(self, x, y=None):
            self.x = x
            self.y = y
    a = A(1, 1)
    b = A(2, 2)
    c = A(3)  # 使用了默认参数
    obj = [a, b, c]
    for i in obj:
        match i:
            case A(x=1, y=1):  # 此处不能直接写实例化的对象,要写 类名(参数,..)
                print('匹配实例化类时,参数x=1, y=1 的对象')
            case A(x=3):
                print('匹配实例化类时,参数x=3,y使用了默认值的对象')
            case A(x=first, y=second):
                print("匹配参数为任意值的实例化对象,first,second两个变量,可以方便的获取对象 x,y 属性实际存储的值",first, second)
    
    

    3. 匹配字典

    a = {'name': 'wang', "age": 22}
    b = {'name': b'zhang', 'age': "33"}
    c = {'name': b'zhao', 'age': 23}
    ls = [a, b, c]
    for i in ls:
        match i:
            case {"name": name, 'age': int(age)}:  # int(age) 代表匹配 age 字段是整数类型的值,name 字段没有规定,所以任意类型都会匹配
                print(f"匹配 age 是整数类型的:{name},{age}")
            case {"name": name, "age": str(age)}:
                print(f'匹配 age 是字符串类型的:{name},{age}')
    
    
  • 相关阅读:
    这样的专家门诊
    CPU 知识介绍
    软考结束了!
    ubuntu环境配置eclipse+opencv
    2016年3月份总结
    点聚合功能基于ARCGIS RUNTIME SDK FOR ANDROID
    如何用java语言获取某个网页的源代码
    点聚合功能改良版本
    ARCGIS切图:TPK文件的空间参考为地理坐标系
    Java中的数据类型
  • 原文地址:https://www.cnblogs.com/wztshine/p/15506748.html
Copyright © 2011-2022 走看看