Python3.10新特性之match语句示例详解

作者:瑞0908 时间:2023-07-23 05:17:23 

在Python 3.10发布之前,Python是没有类似于其他语言中switch语句的,要实现类似的功能最简单的方法就是通过if ... elif ... else ...语句,但是这样毕竟不够优雅,不够“Pythonic”

更推荐的做法是通过字典(dict)实现。

通过字典间接实现 switch

想要通过字典来实现条件分支语句,首先我们需要定义一个字典,来表示不同case和返回值/函数之间的映射关系,然后再利用字典的特性,即可以实现类似于switch的功能。下面定义一个简单的函数,传入不同的case就会打印不同的内容,也可以将打印内容的语句替换成你想要执行的函数:

def switch(case):
   mapping = {
       1: "print('case 1')",
       2: "print('case 2')"
   }
   return eval(mapping[case])
switch(1)
运行结果:
case 1

可以看到,输出结果正是我们想要的“case 1”的结果。

在Python 3.10出现之前,我们更多的是通过上面这种字典映射的方式,来实现类似于switch语句的功能。但是伴随着Python 3.10的发布,Python也终于迎来了自己的'switch'语句,也就是接下来我们重点介绍的match语句。

Python 3.10 新特性—— match 语句,参考资料:Python 3.10增加了比switch更强大的match表达式在运行以下代码之前,请先确保自己的Python版本大于等于3.10。和其他语言一样,当变量num满足哪个case的条件时,就会执行该条件下的对应代码:

num = 5
match num:
   case 10:
       print('you lose')
   case 5:
       print('you win')
运行结果:
you win

当默认分支#当变量a不满足任意一个case条件时,如果我们没有对“其他“情况进行处理,那么是不会执行任何操作的。

下面的代码是不会有任何输出的,因为a不满足任意一个条件:

num = 3
match num:
   case 1:
       print('num 1')
   case 2:
       print('num 2')
无输出
如果想要对”其他“情况进行处理,那么写法如下:
num = 3
match num:
   case 1:
       print('num 1')
   case 2:
       print('num 2')
   case default:
       print('case default', default)
运行结果:
case default 3

可以看到,当变量a不符合任意一个条件时,就会运行到我们的default分支,同时会把变量值赋值给default变量。注意:这里的default仅仅只是一个变量名而已,并非规定写法,也可以使用其他变量名,例如x等。其作用就是在变量不符合任意一个分支条件时,将变量值赋值给该变量。

在case中使用元组

Python的match语句不仅支持数值类型的分支,也支持其他数据类型,例如元组(tuple)

a = (2, 4)
match a:
   case (1, 2):
       print('case 1')
   case (2, x):
       print('case 2', x)
运行结果:
case 2 4

可以看到,变量a在匹配到第二个分支条件时,还把元组的第二个元素值4赋值给了变量x。在case中使用判断语句#不仅如此,match语句还支持在分支条件中插入判断语句:

a = (2, 2)
flag = False
match a:
   case (1, 2):
       print('case 1')
   case (2, x) if flag:
       print('case 2', x)
   case default:
       print('case default', default)
运行结果:
case default (2, 2)

由于第二个分支条件中if flag为False,不符合条件,所以代码进入到最后一个分支条件中。

来源:https://segmentfault.com/a/1190000043378033

标签:Python3.10,特性,match,语句
0
投稿

猜你喜欢

  • Asp性能优化之Response.IsClientConnected属性及其应用示例

    2008-09-18 12:13:00
  • Python中schedule模块定时任务的使用方法(2)

    2023-09-01 09:59:59
  • python自动统计zabbix系统监控覆盖率的示例代码

    2023-11-14 08:23:03
  • MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决

    2024-01-17 01:32:25
  • PyTorch基础之torch.nn.Conv2d中自定义权重问题

    2023-10-13 05:16:31
  • python利用不到一百行代码实现一个小siri

    2021-07-23 13:46:13
  • linecache模块加载和缓存文件内容详解

    2022-09-23 20:00:45
  • 浅谈品牌的视觉识别

    2009-07-03 12:28:00
  • Python对多个sheet表进行整合实例讲解

    2021-01-15 06:18:24
  • 用DW8制作网页中常用的过度效果

    2007-10-16 12:56:00
  • Python获取时光网电影数据的实例代码

    2023-10-22 21:40:52
  • Django中create和save方法的不同

    2021-06-16 14:24:02
  • Python 如何用一行代码实现for循环初始化数组

    2022-06-19 07:56:41
  • 三分钟教会你用Python+OpenCV批量裁剪xml格式标注的图片

    2023-07-09 14:11:01
  • 浅谈MySQL触发器的原理以及使用

    2024-01-19 02:44:46
  • vue2.0 自定义 饼状图 (Echarts)组件的方法

    2024-04-27 15:51:07
  • Django使用redis缓存服务器的实现代码示例

    2022-12-15 09:16:28
  • php在linux环境中如何使用redis详解

    2023-06-14 23:38:30
  • 详解ABP框架中的数据过滤器与数据传输对象的使用

    2024-05-02 17:19:47
  • 浅谈Python中(&,|)和(and,or)之间的区别

    2022-12-19 12:30:53
  • asp之家 网络编程 m.aspxhome.com