(我对部分段落进行翻译)

match statement is used to branch execution of a program. It’s the equivalent of the switch statement found in many other languages, but offers some additional features.

match用于分支控制语句,它类同于switch,这和大多数语言类似,但是它有一些补充特征。

基本语法:

match [expression]:
[pattern](s):
[block]
[pattern](s):
[block]
[pattern](s):
[block]

Crash-course for people who are familiar with switch statements:

  1. 将 switch 替换为 match
  2. 删除 case
  3. 删除任何 break` `。如果默认情况下不想 ``break ,可以使用 continue 作为故障转移。
  4. 将 default 更改为单个下划线。

控制流

The patterns are matched from top to bottom. If a pattern matches, the corresponding block will be executed. After that, the execution continues below the match statement. If you want to have a fallthrough, you can use continue to stop execution in the current block and check the ones below it.

有6中模式类型:

  • 常数模式

    常量原语,如数字和字符串:

    match x:
    1:
    print("We are number one!")
    2:
    print("Two are better than one!")
    "test":
    print("Oh snap! It's a string!")
  • 变量模式

    匹配变量/枚举的内容:

    match typeof(x):
    TYPE_FLOAT:
    print("float")
    TYPE_STRING:
    print("text")
    TYPE_ARRAY:
    print("array")
  • 通配符模式

    这个模式匹配所有内容。它被写成一个下划线。

    在其他语言中,它可以用作 switch 语句中 default 的等效项。:

    match x:
    1:
    print("It's one!")
    2:
    print("It's one times two!")
    _:
    print("It's not 1 or 2. I don't care tbh.")
  • 绑定模式

    绑定模式引入了一个新变量。与通配符模式类似,它匹配所有内容,并为该值提供一个名称。它在数组和字典模式中特别有用。:

    match x:
    1:
    print("It's one!")
    2:
    print("It's one times two!")
    var new_var:
    print("It's not 1 or 2, it's ", new_var)
  • 数组模式

    matches an array. Every single element of the array pattern is a pattern itself, so you can nest them.

    首先测试数组的长度,它必须与模式相同大小,否则模式不匹配。

    开放式数组: 数组可以通过使最后一个子模式 .. 大于模式

    每个子模式必须用逗号分隔。:

    match x:
    []:
    print("Empty array")
    [1, 3, "test", null]:
    print("Very specific array")
    [var start, _, "test"]:
    print("First element is ", start, ", and the last is \"test\"")
    [42, ..]:
    print("Open ended array")
  • 字典模式

    工作方式与数组模式相同。每个键必须是一个常量模式。

    首先测试字典的大小,它必须与模式的大小相同,否则模式不匹配。

    开放式字典: 字典可以通过创建最后一个子模式 .. 来大于模式

    每个子模式必须用逗号分隔。

    如果不指定值,则只检查键的存在。

    值模式与键模式之间用一个``:``分隔开

    match x:
    {}:
    print("Empty dict")
    {"name": "Dennis"}:
    print("The name is Dennis")
    {"name": "Dennis", "age": var age}:
    print("Dennis is ", age, " years old.")
    {"name", "age"}:
    print("Has a name and an age, but it's not Dennis :(")
    {"key": "godotisawesome", ..}:
    print("I only checked for one entry and ignored the rest")
多重模式:

您还可以指定由逗号分隔的多个模式。这些模式中不允许有任何绑定。:

match x:
1, 2, 3:
print("It's 1 - 3")
"Sword", "Splash potion", "Fist":
print("Yep, you've taken damage")

11.match的更多相关文章

  1. python正则表达式详解之Match类及其方法

    1.Match对象简介 match对象通常是由正则表达式对象的match 方法,search 方法等经过匹配之后而产生.可以直接当做bool值使用,如果匹配则相当于True, 如果不匹配,则返回Non ...

  2. 第11.4节 Python正则表达式搜索字符集匹配功能及元字符”[]”介绍

    Python正则表达式字符集匹配表示是指搜索一个字符,该字符在给定的一个字符的集合中.元字符'['和']'是用于组合起来定义匹配字符集,匹配模式中使用 '['开头,并使用']'结尾来穷举搜索的字符可能 ...

  3. 第11.11节 Python正则表达式的指定重复次数匹配模式及元字符”{}”功能介绍

    在<第11.8节 Pytho正则表达式的重复匹配模式及元字符"?". "". "+"功能介绍>和<第11.10节 Pyth ...

  4. Java正则表达式入门——转自RUNOOB.COM

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  5. python3.5 正则表达式

    我们平时上网的时候,经常需要在一些网站上注册帐号,而注册帐号的时候对帐号名称会有一些要求. 比如: 上面的图片中,输入的邮件地址.密码.手机号 才可以注册成功. 我们需要匹配用户输入的内容,判断用户输 ...

  6. python中常用的模块的总结

    1. 模块和包 a.定义: 模块用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件.(例如:文件名:test.py,对应的模块名:test) ...

  7. 开通博客的第一天上传我的C#基础笔记,个人觉得很好用。

    1.索引器  string arrStr = "sddfdfgfh";  索引器的目的就是为了方便而已,可以在该类型的对象后面直接写[]访问该对象里面的成员  Console.Wr ...

  8. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  9. Python之路-python(常用模块学习)

    模块介绍 time &datetime模块 random os sys shutil shelve xml处理 yaml处理 configparser hashlib re正则表达式 1.模块 ...

随机推荐

  1. 洛谷P3121 审查(黄金)Censoring(Gold) [USACO15FEB] AC自动机

    正解:AC自动机 解题报告: 传送门! 啊我好呆啊其实就挺模板题的,,,只是要一个栈搞一下,,,然后我就不会了,,,是看了题解才get的,,,QAQ 然后写下解法趴QwQ 首先看到多串匹配不难想到AC ...

  2. 洛谷P3246 序列 [HNOI2016] 莫队/线段树+扫描线

    正解:莫队/线段树+扫描线 解题报告: 传送门! 似乎是有两种方法的,,,所以分别港下好了QAQ 第一种,莫队 看到这种询问很多区间之类的就会自然而然地想到莫队趴?然后仔细思考一下,发现复杂度似乎是欧 ...

  3. 接口测试工具-Jmeter使用笔记(二:GET/POST请求参数填写)

    举例来说 我的被测系统API的http请求涉及到GET/POST/PUT/DELETE四种.请求传参可分为两种: GET请求 http://请求路径/Ecs-duHc0U4E #该请求参数“Ecs-d ...

  4. 数据库级别DML操作监控审计、表触发器/对象触发器

    使用触发器记录DML,使用触发器记录表的DML 数据库级别DML操作监控审计.表触发器/对象触发器 --创建记录表 CREATE TABLE T_SHALL_LOG ( ID , ) , EVTIME ...

  5. svn介绍

    什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Svn版本管理工具随着时间改变的各 ...

  6. svn 部署 配置

    创建目录并配置 建立版本库目录 创建一个项目名叫wy 在/data/svndata/wy mkdir -p /data/svndata/wy 建立项目版本库 创建一个新的Subversion项目wy, ...

  7. Laravel展示产品-CRUD之show

    上一篇讲了Laravel创建产品-CRUD之Create and Store,现在我们来做产品展示模块,用到是show,①首先我们先修改controller,文件是在/app/Http/Control ...

  8. ansible的安装及基本使用

    1.安装ansible 如果没有版本和别的要求,这里直接使用yum安装 yum -y install ansible 查看版本 [root@ ~]#ansible --version ansible ...

  9. cxImage控件使用

    属性: Picture:载入要显示的图片 Properties->Caption在没有内容的时候显示在图片框中间的文字 Properties->PopupMenuLayout->Me ...

  10. open():打开文件

    1.open():使用指定的模式和编码打开文件,返回文件读写对象 2.使用说明: (1)使用格式:open(filename [, mode [, bufsize]])(2)打开一个文件,返回一个fi ...