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

开发 前端
在这里,程序会检查 lunch_order 的值,并与不同的情况进行匹配。一旦找到匹配项,就会执行相应的代码。比如用户输入 "pizza",程序就会显示"Pizza time!"。最后一个情况中的下划线 _ 是一个通配符,可以匹配任何值。如果输入的值没有匹配到前面的任何一种,就会执行这个通配符对应的代码。

Python的结构化模式匹配

Python 3.10 版本引入了一项新功能,叫做结构化模式匹配。这其实就是一种条件逻辑,可以让我们根据不同的条件执行不同的代码。

比如说,我想根据用户的午餐订单来显示不同的消息:

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!"。

最后一个情况中的下划线 _ 是一个通配符,可以匹配任何值。如果输入的值没有匹配到前面的任何一种,就会执行这个通配符对应的代码。

或模式

在 Python 的模式匹配中,我们还可以用 or 模式来匹配多个可能的值。比如:

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?"。

捕获模式

首先,我们来看看怎么用Python来做一个午餐点餐的程序。我们的目的是,无论用户输入什么,我们都能给出一个回应。看这个例子:

lunch_order = input("你想吃什么午餐?") 

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

在这个代码里,如果用户输入的不是我们列出的菜单上的东西,比如不是沙拉或汤,我们就用 case order: 这行来捕获他们的输入。这样用户输入什么,我们就回应什么。

部分捕获

我们还可以只捕获用户输入的一部分。比如说,我们想让程序能处理类似“草莓冰淇淋”这样的输入,我们可以这样写:

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",第一部分就会被捕获为 flavor

注意点

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

class Special:
    TODAY = 'lasagna'

lunch_order = input("你想吃什么午餐?")

match lunch_order:
    case Special.TODAY:
        print("今天的特餐很棒!")
    case 'pizza':
        print("披萨时间!")

守卫语句

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

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",程序就会特别处理。

希望这个小教程对你们有帮助!通过这些例子,你可以看到Python模式匹配的强大之处,以及它如何帮助我们更好地处理数据和用户的输入。

Python模式匹配总结

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

责任编辑:武晓燕 来源: 更AI
相关推荐

2009-05-18 09:12:00

ASON自动交换光网络

2023-06-06 19:24:06

KubernetesSpark

2019-07-10 10:20:36

前端用户体验javascript

2023-12-26 09:00:00

Java结构化并发开发

2019-04-04 14:05:20

consolejs前端

2015-05-04 14:12:43

2009-06-18 15:51:52

SSL VPN负载均衡Array

2020-06-16 13:22:22

AI创新深度学习

2013-07-31 14:19:06

Windows 8.1

2019-01-18 13:13:40

Facebook 开发开源

2023-11-27 08:21:49

Camera2API,

2009-08-04 15:55:56

OracleEPMBI

2024-03-01 01:25:40

结构化日志可读性

2023-12-05 10:25:24

Python类型注解

2009-07-06 14:23:00

SSL VPNArray netwo

2009-06-19 10:16:10

巅峰访谈

2017-05-16 21:31:03

结构化数据新模式

2023-03-29 21:06:53

数据中心

2021-08-16 12:13:02

SwiftUIList ArticleList

2024-02-21 21:31:20

Python数据分析数据可视化
点赞
收藏

51CTO技术栈公众号