当前位置:首页 > 科技  > 软件

Python指南之结构化模式匹配:让编程变得更简单、更灵活

来源: 责编: 时间:2023-12-01 17:12:14 388观看
导读Python的结构化模式匹配Python 3.10 版本引入了一项新功能,叫做结构化模式匹配。这其实就是一种条件逻辑,可以让我们根据不同的条件执行不同的代码。比如说,我想根据用户的午餐订单来显示不同的消息:lunch_order = input(

Python的结构化模式匹配

Python 3.10 版本引入了一项新功能,叫做结构化模式匹配。这其实就是一种条件逻辑,可以让我们根据不同的条件执行不同的代码。YId28资讯网——每日最新资讯28at.com

比如说,我想根据用户的午餐订单来显示不同的消息:YId28资讯网——每日最新资讯28at.com

lunch_order = input("What would you like for lunch? ")match lunch_order:    case 'pizza':        print("Pizza time!")    case 'sandwich':        print("Here's your sandwich")    case 'taco':        print('Taco, taco, TACO, tacotacotaco!')    case _:        print("Yummy.")

在这里,程序会检查 lunch_order 的值,并与不同的情况进行匹配。一旦找到匹配项,就会执行相应的代码。比如用户输入 "pizza",程序就会显示"Pizza time!"。YId28资讯网——每日最新资讯28at.com

最后一个情况中的下划线 _ 是一个通配符,可以匹配任何值。如果输入的值没有匹配到前面的任何一种,就会执行这个通配符对应的代码。YId28资讯网——每日最新资讯28at.com

或模式

在 Python 的模式匹配中,我们还可以用 or 模式来匹配多个可能的值。比如:YId28资讯网——每日最新资讯28at.com

lunch_order = input("What would you like for lunch? ") match lunch_order:    # --snip--    case 'taco':        print('Taco, taco, TACO, tacotacotaco!')    case 'salad' | 'soup':        print('Eating healthy, eh?')    case _:        print("Yummy.")

在这个例子中,如果用户输入 "salad" 或 "soup",程序就会显示 "Eating healthy, eh?"。YId28资讯网——每日最新资讯28at.com

捕获模式

首先,我们来看看怎么用Python来做一个午餐点餐的程序。我们的目的是,无论用户输入什么,我们都能给出一个回应。看这个例子:YId28资讯网——每日最新资讯28at.com

lunch_order = input("你想吃什么午餐?") match lunch_order:    # 这里还有其他代码    case 'salad' | 'soup':        print('吃得健康哦!')    case order:        print(f"享受你的{order}。")

在这个代码里,如果用户输入的不是我们列出的菜单上的东西,比如不是沙拉或汤,我们就用 case order: 这行来捕获他们的输入。这样用户输入什么,我们就回应什么。YId28资讯网——每日最新资讯28at.com

部分捕获

我们还可以只捕获用户输入的一部分。比如说,我们想让程序能处理类似“草莓冰淇淋”这样的输入,我们可以这样写:YId28资讯网——每日最新资讯28at.com

lunch_order = input("你想吃什么午餐?")if ' ' in lunch_order:    lunch_order = lunch_order.split(maxsplit=1)match lunch_order:    case (flavor, 'ice cream'):        print(f"这是你的成熟{flavor}午餐。")    # 这里还有其他代码

这段代码会把输入分成两部分,如果第二部分是"ice cream",第一部分就会被捕获为 flavorYId28资讯网——每日最新资讯28at.com

注意点

使用捕获模式时,有一个小陷阱。在模式中的所有没有修饰的变量名,都会被用来捕获值。这意味着,如果你想使用某个变量的值,你需要使用点操作符来指定它。看这个例子:YId28资讯网——每日最新资讯28at.com

class Special:    TODAY = 'lasagna'lunch_order = input("你想吃什么午餐?")match lunch_order:    case Special.TODAY:        print("今天的特餐很棒!")    case 'pizza':        print("披萨时间!")

守卫语句

最后,我想向你们展示一个叫做“守卫语句”的技巧。这是一个额外的条件语句,只有在满足这个条件时,模式才会匹配。比如说,我们想让程序能特别处理“冰淇淋”这个词,我们可以这样写:YId28资讯网——每日最新资讯28at.com

class Special:    TODAY = 'lasagna'lunch_order = input("你想吃什么午餐?")match lunch_order:    # 这里还有其他代码    case 'salad' | 'soup':        print('吃得健康哦!')    case ice_cream if 'ice cream' in ice_cream:        flavor = ice_cream.replace('ice cream', '').strip()        print(f"这是你的成熟{flavor}午餐。")    case order:        print(f"享受你的{order}。")

在这个例子里,如果用户输入的词里包含"ice cream",程序就会特别处理。YId28资讯网——每日最新资讯28at.com

希望这个小教程对你们有帮助!通过这些例子,你可以看到Python模式匹配的强大之处,以及它如何帮助我们更好地处理数据和用户的输入。YId28资讯网——每日最新资讯28at.com

Python模式匹配总结

在Python中,模式匹配有点像“魔法”,很容易让人爱不释手。但记住,不要滥用哦!结构化模式匹配特别适合在多种可能的模式中检查一个主题,但就像午餐订单中的“冰淇淋”情形,当主题的可能值变得复杂时,它的局限性就显现出来了。如果你不确定是否需要在某个场景使用结构化模式匹配,那就坚持使用条件语句吧。YId28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35846-0.htmlPython指南之结构化模式匹配:让编程变得更简单、更灵活

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 你会在浏览器中打断点吗?我会!

下一篇: 系统调用:计算机中的“服务员”

标签:
  • 热门焦点
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
Top