本博客主要参考为北京大学陈斌老师的下一站Python

image

概述

match-case是python3.10+的新特性,可以理解为python中的switch-case。如果你想要使用它,请注明所需python>=3.10.

基本语法和语义

match <表达式>:
    case <值1>:
        <语句块1>
    case <值2> | <值3> | <值4> :
        <语句块2>
    case _:
        <语句块3>
  • 语义:计算表达式的值,依次匹配case后的值,一旦匹配到,就执行对应的语句块1次,语句结束;
  • 如果所有case都匹配不上的就执行case _:对应的语句块,语句结束。
  • case后必须跟“字面值”,也就是说,不能是表达式。

example1

# match-case的基本例子
color = input("请输入需要查询的颜色:")
match color:
    case "red" | "红" | "红色":
        r, g, b = 255, 0, 0
    case "green" | "绿" | "绿色":
        r, g, b = 0, 255, 0
    case "yellow" | "黄" | "黄色":
        r, g, b = 255, 255, 0
    case _:
        r, g, b = -1, -1, -1
if r >= 0:
    print(f"{color}的颜色代码:#{r:02X}{g:02X}{b:02X}")
else:
    print(f"查询不到{color}的颜色代码!")

example2

# 今天是星期几
from datetime import datetime
match datetime.today().weekday():
    case 0:
        print("今天是星期一")
    case 3:
        print("疯狂星期四!")
    case 4:
        print("加油,周末就到了!")
    case 5 | 6:
        print("周末愉快!")
    case _:
        print("普普通通的工作日")

进阶用法

如果在case写变量名

  • 不是你想象的那样匹配变量的值
  • case <名字>的含义是“捕捉”匹配不到的值
p = eval(input("请输入坐标(x,y):"))
match p:
    case (0, 0):
        print(f"{p}是原点")
    case (0, y):
        print(f"{p}在Y轴上,距离原点{abs(y)}")
    case (x, 0):
        print(f"{p}在X轴上,距离原点{abs(x)}")
    case (x, y):
        print(f"{p}距离原点{abs(x+y*1j)}")

只是为了不写if语句么?

  • 引入了match-case语句,我们得到一个C语言里switch语句的等价物
  • 可是只是为了把elif语句改一种形式?
  • 甚至丢掉了elif判断条件的灵活性
from datetime import datetime
if (w := datetime.today().weekday()) == 0:
    print("今天是星期一")
elif w == 3:
    print("疯狂星期四!")
elif w == 4:
    print("加油,周末就到了!")
elif w in (5, 6):
    print("周末愉快!")
else:
    print("普普通通的工作日")

原文地址:http://www.cnblogs.com/coco02/p/16882282.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性