match-case语句

举报
运维@大白鹅 发表于 2022/02/24 14:01:51 2022/02/24
【摘要】 在Python3.10中发布了一个新特性:match-case,类似C语言switch-case语句,可以实现流程控制

流程控制语句

是什么

在Python3.10中发布了一个新特性:match-case,类似C语言switch-case语句,可以实现流程控制

怎么用

a = int(input("输入数字:"))
match a:
    case 0:
        print("是0")
    case 1:
        print("是1")
    case 2:
        print("是2")
    case _:#下划线"_" 可以匹配任何内容
        print("是其他")
输入数字:0
00


当然,可以使用上一篇介绍的if-elif-else来实现同样的功能

a = int(input("输入数字:"))
if a == 0:
    print("是0")
elif a == 1:
    print("是0")
elif a == 2:
    print("是2")
else:
    print("是其他") 
输入数字:0
00


拓展

那么问题来了,既然if-elif-else可以实现同样的功能,还有必要搞出来一个match-case吗? 肯定是有必要的,下面展示match-case的灵活之处。

1、match的简单使用

def http_status(status):
    match status:
        case 400:
            return "Bad request"
        case 401:
            return "Unauthorized"
        case 403:
            return "Forbidden"
        case 404:
            return "Not found"
print(http_status(404))
Not found

这个用法原理很简单,就是将输入的信息与case进行单一匹配,根据HTTP状态码返回指定消息


我们也可以使用管道符进行合并操作

def http_status(status):
    match status:
        case 401|402|403|404:
            return "Fail"
        case 200:
            return "Success"
print(http_status(404))
print(http_status(200))
Fail
Success



2、列表中的通配符

def alarm(item):
    match item:
        case [time, action]:
            print(f'当前时间:{time}\n活动:{action}')
        case [time, *actions]:#在actions前加上了"*",就能匹配列表中的一个或者多个操作
            print(f'当前时间:{time}\n活动:')
            for action in actions:
                print(f'{action}')
alarm(["上午","学习"])
alarm(["下午","做饭","吃饭","去购物"])
当前时间:上午
活动:学习
当前时间:下午
活动:
做饭
吃饭
去购物


我们在time上也使用管道符进行合并匹配,如果输入的时间不存在就返回”预设时间不存在“。代码中的”as“关键字作用是将匹配到的值赋给as后面的变量

def alarm(item):
    match item:
        case [("上午"|"中午"|"下午") as time, action]:
            print(f'当前时间:{time}\n活动:{action}')
        case [("上午"|"中午"|"下午") as time, *actions]:
            print(f'当前时间:{time}\n活动:')
            for action in actions:
                print(f'{action}')
        case _:
            print("预设时间不存在")
alarm(["晚上","睡觉"])
预设时间不存在

举了两个例子,相信你对match-case和if-elif-else二者的区别也有了些许的理解,前者重在匹配,后者重在判断
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。