11.match
(我对部分段落进行翻译)
A 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:
- 将
switch
替换为match
- 删除
case
- 删除任何
break` `。如果默认情况下不想 ``break
,可以使用continue
作为故障转移。 - 将
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的更多相关文章
- python正则表达式详解之Match类及其方法
1.Match对象简介 match对象通常是由正则表达式对象的match 方法,search 方法等经过匹配之后而产生.可以直接当做bool值使用,如果匹配则相当于True, 如果不匹配,则返回Non ...
- 第11.4节 Python正则表达式搜索字符集匹配功能及元字符”[]”介绍
Python正则表达式字符集匹配表示是指搜索一个字符,该字符在给定的一个字符的集合中.元字符'['和']'是用于组合起来定义匹配字符集,匹配模式中使用 '['开头,并使用']'结尾来穷举搜索的字符可能 ...
- 第11.11节 Python正则表达式的指定重复次数匹配模式及元字符”{}”功能介绍
在<第11.8节 Pytho正则表达式的重复匹配模式及元字符"?". "". "+"功能介绍>和<第11.10节 Pyth ...
- Java正则表达式入门——转自RUNOOB.COM
Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...
- python3.5 正则表达式
我们平时上网的时候,经常需要在一些网站上注册帐号,而注册帐号的时候对帐号名称会有一些要求. 比如: 上面的图片中,输入的邮件地址.密码.手机号 才可以注册成功. 我们需要匹配用户输入的内容,判断用户输 ...
- python中常用的模块的总结
1. 模块和包 a.定义: 模块用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件.(例如:文件名:test.py,对应的模块名:test) ...
- 开通博客的第一天上传我的C#基础笔记,个人觉得很好用。
1.索引器 string arrStr = "sddfdfgfh"; 索引器的目的就是为了方便而已,可以在该类型的对象后面直接写[]访问该对象里面的成员 Console.Wr ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- Python之路-python(常用模块学习)
模块介绍 time &datetime模块 random os sys shutil shelve xml处理 yaml处理 configparser hashlib re正则表达式 1.模块 ...
随机推荐
- odoo10如何自定义自动生成单据编号
1.在已有的model中穿件一个字段name class qingjiadan(models.Model): _name = 'qingjia.qingjiadan' name = fields.Ch ...
- TFA(Trace File Analyzer)的安装与使用(ORACLE版本12C)
TFA是Oracle从11.2版本开始推出的一种类似diagcollection的一个oracle 集群日志收集器,而且TFA比diagcollection集中和自动化的诊断信息收集能力更强大.TFA ...
- go不在dock显示运行
用这种方法就可以了go build -ldflags -H=windowsgui XXX.go
- 关于javascript中defineProperty的学习
语法 Object.defineProperty(obj, prop, descriptor) 参数 obj 要在其上定义属性的对象. prop 要定义或修改的属性的名称. descriptor 将被 ...
- 【JMeter】获取JDBC响应做接口关联
1:从sql表中将需要取的数据查出来 2:我们需要把这个id为4451的数据从sql里面取出来,传到下一个sql里面,执行删除 3:写一个接口的传参有些不同,变成了var_id_1.var_id是之前 ...
- vue中自定义软键盘
https://segmentfault.com/a/1190000012568480
- Koala ===》编译工具 ==》Less和Sass
官网下载网址:http://koala-app.com/index-zh.html 安装时:必须装在c盘,否则会编译报错,切记要装在c盘使用,把整体目录拖动到软件中,执行编译(success)即可 整 ...
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
- 【LeetCode每天一题】Reverse String
Write a function that reverses a string. The input string is given as an array of characters char[]. ...
- [ErrorException] "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?
Mac上PHP更新到7.3,使用Composer报这个错误 解决办法: composer selfupdate