Python 的 match 有点好用,推荐试试

发表于:2023-12-19 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Python    来源:老猫coder

  Match 和 switch 都是控制流语句,但它们在语法和用法上有一些区别。
  (1) 语法:
  switch 语句通常在其他编程语言中使用,如 C、C++、Java 等。它的语法通常是 switch(expression) { case value1: ... case value2: ... default: ... }。
  match 语句是 Python 3.10 引入的新特性,它的语法是 match subject: case pattern_1: ... case pattern_2: ... case _: ...。
  (2) 匹配模式:
  switch 语句通常只能匹配整数或枚举类型,而 match 语句可以匹配更复杂的模式,包括字符串、列表、元组等。
  (3) 执行顺序:
  switch 语句通常会按照 case 的顺序执行,直到找到匹配的 case 为止。如果没有找到匹配的 case,那么就会执行 default 分支。
  match 语句会按照 case 的顺序执行,直到找到匹配的 case 为止。如果没有找到匹配的 case,那么就会执行 _ 分支。
  (4) 性能:
  switch 语句通常比 match 语句更快,因为它可以直接跳转到匹配的 case。
  match 语句的性能通常比 switch 语句差,因为它需要逐个检查每个 case。
  总的来说,match 和 switch 都是控制流语句,但它们在语法、匹配模式、执行顺序和性能等方面有一些区别。
  在 Python 3.10 中,引入了 match 语句作为 switch 语句的更强大版本。match 语句可以用于模式匹配,这是一种更灵活和可读性更高的方式来匹配值。
  match 语句的基本语法如下:
  python
  match subject:
      case pattern_1:
          # code to execute if subject matches pattern_1
      case pattern_2:
          # code to execute if subject matches pattern_2
      ...
      case _:
          # code to execute if subject does not match any of the patterns
  其中,subject 是要匹配的值,pattern_1 和 pattern_2 是匹配模式,_ 是一个特殊的模式,用于匹配任何值。
  例如,我们可以使用 match 语句来匹配一个整数的值:
  python
  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"
  在这个例子中,match 语句会尝试匹配 status 的值,并执行相应的代码。如果 status 的值不匹配任何一个模式,那么就会执行 _ 模式对应的代码。
  match 语句也可以匹配更复杂的模式,例如,我们可以匹配一个元组:
  python
  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")
  在这个例子中,match 语句会尝试匹配 point 的值,并执行相应的代码。如果 point 的值不匹配任何一个模式,那么就会引发 ValueError 异常。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号