首页 > 编程语言 >Python语法糖之match-case

Python语法糖之match-case

时间:2022-11-11 22:44:54浏览次数:54  
标签:case 语句 elif Python datetime print match

目录
本博客主要参考为北京大学陈斌老师的下一站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("普普通通的工作日")

标签:case,语句,elif,Python,datetime,print,match
From: https://www.cnblogs.com/coco02/p/16882282.html

相关文章

  • OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src
    原先一直以为数据集路径错误,调了半天也没用,后来打印图片列表,发现一个隐藏文件在终端运行 ls-a也出现了这个隐藏文件  删除 rm-rf.ipynb_checkpoints之后成功......
  • python中的运算符
    #1.算术运算符print('1.算术运算符')print('+1+2+3=',1+2+3)print('-10-5-1=',10-5-1)print('*2*2*3=',2*2*3)print('/7/2=',7/2)#除法,操......
  • Python获取IP地址
    Python获取IP地址一些情况下,我们需要通过Python获取电脑当前的IP地址,并执行一些操作(比如上传到数据库),则可以执行下面的命令:1.获取外网IP地址importrequestsprint(req......
  • 数据降噪处理--python实现
    原文链接:https://blog.csdn.net/qq_38342510/article/details/121227880一、均值滤波1)算法思想 给定均值滤波窗口长度,对窗口内数据求均值,作为窗口中心点的数据的值,之后......
  • python 修改ps背景颜色
    需要安装photoshop-python-api 1"""Changethecolorofthebackgroundandforeground."""2#Importlocalmodules3fromphotoshopimportSession4......
  • Python 监控web站点异常邮件提醒并自动重启
    生产环境中站点,如邮于访问量大出现异常不能正常运行,一般可以通过重启解决的。我们可以尝试通过Python监控监控web站点异常,发送邮件通知并自动重启服务。本文主要介绍Python......
  • #python笔记
    python笔记数据类型查看使用type()语句来查看数据的类型方法一:使用print直接输出信息print(type("黑马程序员")print(type("666"))print(type(11.345))方法二:......
  • python调用golang 从指定序列中找出一组与目标值最接近的子序列 kayb
    python调用golang从指定序列中找出一组与目标值最接近的子序列编写go代码生成so库python代码调用编写go代码写入hello.go文件packagemainimport( "C" "en......
  • python的字符串、元祖和列表总结
    字符串、列表、元组统称:序列类型序列的共同特征:1、都有索引值,内部元素是有序的。2、支持切片操作3、都可以通过len()去获取元素的个数。列表和元祖之间的转换元......
  • python合并两个dict
    合并dict,有以下几种方法:1.常规遍历d1={}d2={}d3={}fork,vind1.items():d3[k]=vfork,vind2.items():d3[k]=v2.items相加法d3=dict(d1.item......