match-case语句
【摘要】 在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
0
是0
当然,可以使用上一篇介绍的if-elif-else来实现同样的功能
a = int(input("输入数字:"))
if a == 0:
print("是0")
elif a == 1:
print("是0")
elif a == 2:
print("是2")
else:
print("是其他")
输入数字:0
0
是0
拓展
那么问题来了,既然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)