python 3.10支持match语句,3,10以下不支持。
match语句接受一个表达式,并将其值与作为一个或多个case块给出的连续模式进行比较。这表面上类似于C、Java或JavaScript(以及许多其他语言)中的switch语句,但更类似于Rust或Haskell等语言中的模式匹配。只有第一个匹配的模式才会被执行,它还可以将值中的组件(序列元素或对象属性)提取到变量中。
最简单的形式是将一个目标值与一个或多个字面值进行比较:
【资料图】
def http_error(status): match status: case 400: return "Bad request" case 404: return "Not found" case 418: return "I"m a teapot" case _: return "Something"s wrong with the internet"
注意最后一个代码块:“变量名” _ 被作为 通配符 并必定会匹配成功。 如果没有 case 语句匹配成功,则不会执行任何分支。
使用 | (“ or ”)在一个模式中可以组合多个字面值:
case 401 | 403 | 404: return "Not allowed"
模式的形式类似解包赋值,并可被用于绑定变量:
# point is an (x, y) tuple match point: case (0, 0): print("Origin") case (0, y): print(f"Y={y}") case (x, 0): print(f"X={x}") case (x, y): print(f"X={x}, Y={y}") case _: raise ValueError("Not a point")
请仔细研究此代码! 第一个模式有两个字面值,可以看作是上面所示字面值模式的扩展。但接下来的两个模式结合了一个字面值和一个变量,而变量 绑定 了一个来自目标的值(point)。第四个模式捕获了两个值,这使得它在概念上类似于解包赋值 (x, y) = point。
如果使用类实现数据结构,可在类名后加一个类似于构造器的参数列表,这样做可以把属性放到变量里:
class Point: x: int y: int def where_is(point): match point: case Point(x=0, y=0): print("Origin") case Point(x=0, y=y): print(f"Y={y}") case Point(x=x, y=0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point")
可在 dataclass 等支持属性排序的内置类中使用位置参数。还可在类中设置 __match_args__ 特殊属性为模式的属性定义指定位置。如果它被设为 ("x", "y"),则以下模式均为等价的,并且都把 y 属性绑定到 var 变量:
Point(1, var) Point(1, y=var) Point(x=1, y=var) Point(y=var, x=1)
读取模式的推荐方式是将它们看做是你会在赋值操作左侧放置的内容的扩展形式,以便理解各个变量将会被设置的值。 只有单独的名称(例如上面的 var)会被 match 语句所赋值。 带点号的名称 (例如 foo.bar)、属性名称(例如上面的 x= 和 y=)或类名称(通过其后的 "(...)" 来识别,例如上面的 Point)都绝不会被赋值。
模式可以任意地嵌套。例如,如果有一个由点组成的短列表,则可使用如下方式进行匹配:
match points: case []: print("No points") case [Point(0, 0)]: print("The origin") case [Point(x, y)]: print(f"Single point {x}, {y}") case [Point(0, y1), Point(0, y2)]: print(f"Two on the Y axis at {y1}, {y2}") case _: print("Something else")
为模式添加成为守护项的 if 子句。如果守护项的值为假,则 match 继续匹配下一个 case 语句块。注意,值的捕获发生在守护项被求值之前:
match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on the diagonal")
match 语句的其他特性:
与解包赋值类似,元组和列表模式具有完全相同的含义,并且实际上能匹配任意序列。 但它们不能匹配迭代器或字符串。序列模式支持扩展解包操作:[x, y, *rest] 和 (x, y, *rest) 的作用类似于解包赋值。 在 * 之后的名称也可以为 _,因此,(x, y, *_) 可以匹配包含至少两个条目的序列,而不必绑定其余的条目。映射模式:{"bandwidth": b, "latency": l} 从字典中捕获 "bandwidth" 和 "latency" 的值。与序列模式不同,额外的键会被忽略。**rest 等解包操作也支持。但 **_ 是冗余的,不允许使用。使用 as 关键字可以捕获子模式:
case (Point(x1, y1), Point(x2, y2) as p2): ...
将把输入的第二个元素捕获为 p2 (只要输入是包含两个点的序列)
大多数字面值是按相等性比较的,但是单例对象 True, False 和 None 则是按标识号比较的。
模式可以使用命名常量。 这些命名常量必须为带点号的名称以防止它们被解读为捕获变量:
from enum import Enum class Color(Enum): RED = "red" GREEN = "green" BLUE = "blue" color = Color(input("Enter your choice of "red", "blue" or "green": ")) match color: case Color.RED: print("I see red!") case Color.GREEN: print("Grass is green") case Color.BLUE: print("I"m feeling the blues :(")
到此这篇关于Python match语句的具体使用的文章就介绍到这了,更多相关Python match内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
标签:
据各方数据,1月31日上午10时许,深圳出品的动画电影《熊出没·伴我熊芯》票房突破10亿元,在首日票房、档期票房、连续破亿天数等多方面打
1月27日,携程发布的《2023年春节旅游总结报告》显示,今年春节,深圳游客的出境游订单量同比去年增长近5倍。相较国内热门景点的人山人海,
1月27日,记者从深圳市文化广电旅游体育局获悉,2023年春节黄金周期间(1月21日至27日),深圳共接待游客469 25万人次,旅游收入31 58亿元,
据深圳市春运办统计,1月15日和16日连续两天,深圳对外发送旅客人数都在48万左右,春运进入客流高峰期。1月15日,深圳春运对外旅客发送量达
新年音乐会是观众喜闻乐见的年度重要文化品牌活动,多年来已成为深圳市民跨岁迎新的例牌项目。12月30日、31日晚,深圳交响乐团将在深圳音乐
作为来深科研人员中的一员,中山大学附属第八医院的助理研究员郭雅婕对深圳在人才服务方面的举措赞不绝口:我作为基础研究人员,很希望自己
12月1日晚8点,2023年故宫年票正式开售。相比于去年,今年购票顺畅了许多。据了解,2022年故宫年票发售时,因短时间内购买年票人数过多,曾
昨日,冷空气到达,广州气温逐步下降。据商超方面预测,随着气温的逐渐下降,市民对于御寒类商品消费需求有所上升,不少广州商超准备了有关
小井盖、大民生。今年以来,深圳开展全市窨井盖专项治理工作成效显著。截至11月20日,全市共排查窨井盖约350万个,发现存在问题的窨井盖约3
备受关注的汕汕(汕头至汕尾)铁路汕头站及站区工程近日传出最新动态:项目已顺利完成工程招标工作,由中铁建设集团有限公司中标承建。目前,
焦点关注:俯瞰大片!跨海大桥高架路
跨海大桥高架路一期西起胶州湾大桥李村河互通立交,沿李村河、张村河向东蜿蜒7 6公里至海尔路立交桥。自2011年主桥建成通车以来,大大方便了人
聆听榜样故事,感受道德力量!青岛市
4月21日上午,伴随着开场快板《阳光路上尽朝晖》的精彩上演,青岛市道德模范故事汇基层巡讲活动在城阳区拉开帷幕。来自市、区和街道的有关领导
速递!涉及8处传统风貌建筑!山西路
为提升城市品质,推动传统风貌建筑的活化利用,市南区政府拟组织实施山西路片区保护更新工作。4月20日,青岛市自然资源和规划局发布《山西路片
福清路家庭医生走进新世纪幼儿园 开
半岛网4月14日讯(记者孙贴静实习生王春瑜)儿童是祖国的花朵,是未来的希望。4月12日,在第35个爱国卫生月来临之际,福清路社区卫生服务中心
青岛马拉松明日开跑,选手和工作人员
2023年青岛马拉松将于4月22日鸣枪开跑比赛当日运动员、裁判员、赛事志愿者和工作人员可免费乘坐地铁!同时五四广场站、浮山所站部分出入口临时
即时焦点:沪深港通交易日历优化下周
实施后,2023年将分别在五一、端午和中秋国庆假期前各新增两个交易日,2023年港股通首次新增交易日为4月27日、4月28日,沪股通首次新增交
当前关注:盘点 2023 年第一季度抖
据介绍,电商MCN机构等级体系是抖音电商全新上线的对电商MCN机构进行等级评定、并给予不同等级机构相应权益激励的一套体系,激励电商MCN机构不
深圳北站华润万象中心开盘卖35亿元
深圳2盘近日开盘并透露开盘销售情况,其中,深圳北站的北站超核万象中心(二期)4月20日开盘,当天销售35亿元;龙岗大运星龙园4月15日开盘,当
刺勒川
1、敕勒歌北朝乐府敕勒川,阴山下,天似穹庐,笼盖四野。2、天苍苍,野茫茫,风吹草低见牛羊。
环氧丙烷_关于环氧丙烷介绍
环氧丙烷,关于环氧丙烷介绍这个很多人还不知道,我们一起来看看!1、环氧丙烷,又名氧化丙烯、甲基环氧乙烷、1,2-环氧丙烷,是一种有机化合物
全球速看:环氧乙烷灭菌_关于环氧乙
环氧乙烷灭菌,关于环氧乙烷灭菌介绍这个很多人还不知道,我们一起来看看!1、环氧乙烷灭菌装置是一次性使用无菌医疗器械生产企业的关键设备,
全球实时:山西一季度 GDP 同比增
山西省统计局公布一季度全省经济运行情况,根据地区生产总值统一核算结果,一季度山西全省地区生产总值为5824 33亿元,按不变价格计算,比上年
【世界独家】NBA彩经:绿军再擒老鹰
凯尔特人VS老鹰拿下赛点凯尔特人客场再擒老鹰美国职业篮球联赛凯尔特人VS老鹰(+4 5)推荐:让分客胜凯尔特人在系列赛的前两个主场都轻松拿下
看热讯:证监会就泽达易盛案、紫晶存
1 泽达易盛案、紫晶存储案系科创板首批欺诈发行案件,社会影响广泛 如在上述两案的行政责任方面,我会依法向泽达易盛(天津)科技股份有限公
环氧乙烷灭菌器_关于环氧乙烷灭菌器
环氧乙烷灭菌器,关于环氧乙烷灭菌器介绍这个很多人还不知道,我们一起来看看!1、wi28477环氧乙烷气体(亦称氧化乙烯气体。2、俗称EO)是已知
天天消息!全面升级!广东深化戎归南
文 图羊城晚报全媒体记者侯梦菲4月21日下午,广东省戎归南粤退役军人“仁军保”2023年至2027年合作框架协议签约仪式在广州举行。省退役军人事
环氧七氯_关于环氧七氯介绍
环氧七氯,关于环氧七氯介绍这个很多人还不知道,我们一起来看看!1、环氧七氯主要用于防治地下害虫、棉花后期害虫和禾本科作物及牧草害虫。2、
【报资讯】环氧乙烷_关于环氧乙烷介
环氧乙烷,关于环氧乙烷介绍这个很多人还不知道,我们一起来看看!1、环氧乙烷是一种有机化合物,化学式是C2H4O,是一种有毒的致癌物质,以前被
全球速读:罗定市气象台发布暴雨黄色
受强降雨云系影响,我市加益、泗纶、黎少等镇出现了短时强降水,预计降雨将持续,罗定市气象台4月21日17时27分发布加益、泗纶、黎少、龙湾、榃
焦点热议:优秀!学校专门为一名学生
优秀!学校专门为一名学生办作业展
e 签宝发布「统一印章平台」
在功能层面,该平台能够帮助企业实现物理印章、电子印章的一体化全生命周期管理,并通过丰富灵活的openAPI接口,为企业供应链采购、经销管理、
四会市气象台解除冰雹橙色预警【II级
据国家突发事件预警信息发布网:影响大沙镇、江谷镇的强雷雨云团减弱移出。四会市气象台于2023年04月21日17时35分解除四会市大沙镇、江谷镇冰
广东省肇庆市发布暴雨黄色预警
过去1小时肇庆新区出现了30毫米以上强降水,预计未来2小时降水将持续,肇庆市气象台于21日16时51分发布鼎湖区暴雨黄色预警信号。(预警信息来
讯息:T3 出行发布 1521 战略:峰
T3出行CEO崔大勇还透露企业未来三年发展目标——「1521」战略,即到2026年年末,日订单峰值突破1000万单,营收达到500亿元,全国覆
财务造假长达 8 年,*ST 奇信被重
非董监高也被罚款200万元,财务造假长达8年的江西奇信集团股份有限公司(简称「*ST奇信」,002781 SZ)被证监会重罚 信息披露违法违规
世界微动态丨王博:新能源销量已超25
王博:新能源销量已超25%,吉利将快速稳健推进电动转型,王博,博越,suv,吉利汽车,suv车型
热门:洗车店墙面漏水,贴隔壁遭殃数
图说:洗车店墙面漏水,贴隔壁遭殃数月来源 采访对象供图近日,市民何先生向新民晚报“新民帮侬忙”栏目反映,隔壁洗车店管道
金沙洲是广州还是佛山_广州佛山旅游
1、第一名:西樵山2、必游景点佛山是国家5A级景区,以山川秀美著称,享有岭南美誉。3、第二名:佛山祖庙4、必游景点佛山是
环球讯息:广州番禺下冰雹了!广东多
文 羊城晚报全媒体记者梁怿韬此前发布冰雹预警的广州市番禺区,在4月21日14时许出现冰雹天气。截至4月21日15时03分,广东多地发布冰雹预警。网
今日播报!环比增幅_关于环比增幅介绍
环比增幅,关于环比增幅介绍这个很多人还不知道,我们一起来看看!1、环比增幅是指与历史同时期比较。2、例如2005年7月份与2004年7月份相比称其