目录
本博客主要参考为北京大学陈斌老师的下一站Python
概述
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("普普通通的工作日")
标签:case,语句,elif,Python,datetime,print,match
From: https://www.cnblogs.com/coco02/p/16882282.html