加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Python 3.10 正式推出了!我发现了一个可怕的功能...

发布时间:2021-11-04 12:14:31 所属栏目:语言 来源:互联网
导读:2021年10月4日 Python 终于正式发布了 3.10 版本,看了下这个版本的一些特性,最受关注的应该就是 结构模式匹配 了吧?也就是大家所熟悉的switch-case,写错了不好意思,是 match-case。 下边是最简单的一个 match-case 的例子,看起来是不是非常的直观简洁
2021年10月4日 Python 终于正式发布了 3.10 版本,看了下这个版本的一些特性,最受关注的应该就是 结构模式匹配 了吧?也就是大家所熟悉的switch-case,写错了不好意思,是 match-case。       下边是最简单的一个 match-case 的例子,看起来是不是非常的直观简洁?   def http_error(status):       match status:           case 400:               print("Bad request")           case 404:               print("Not found")           case 418:               print("I'm a teapot")           case _:               print("Something's wrong with the internet")  对这个功能满怀期待的我,赶紧就下载升级了 3.10 的 Python 赶紧试用,可没想到在我深入的体验过后,我从最开始的期待,变成了敬畏。   敬畏,是因为这样一个看似简单的新功能,却有着不少的学习成本,并且对 结构模式匹配 半知半解的人来说,会增大代码出错的概率,并不是大数人都能轻松驾驭的。   我为什么会这么说呢?我会在文章最后来简述我的观点。   鉴于大多数人,都没有实际用过这种 结构模式匹配,我会从 升级 3.10 开始教大家如何尝鲜这个新功能,然后我会详细的介绍 match-case 的使用方法。    1. 升级 3.10 新版本 我本机的电脑上目前的 Python 版本是 3.9.1 的   $ /usr/local/bin/python3 --version   Python 3.9.1  由于这边我使用的是 mac,因此我从官网上下载的是 Python 3.10 的 pkg 文件,如果是 win 的用户,可以下载相应的 msi 或者 exe 文件。   下载链接我贴在下边,可以直接访问下载   mac: https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg   win: https://www.python.org/ftp/python/3.10.0/python-3.10.0-amd64.exe  我下载好安装文件后,双击安装,之后就双击下载的 pkg 文件,进入安装流程       一路点击继续,该同意的同意一下,出现如下提示表示安装成功。       再次在终端上确认下是否升级成功        2. or 模式的使用 在上面我已经贴出一个 match-case 的最简单示例,这边就直接跳过简单示例,来说说那些比较特殊的用法。   在 Python 3.10 中其实有新增一个 联合类型操作符 | ,但这个只能用于类型,具体的用法,我会在下一篇文章中做详细的介绍,本篇文章还是集中于 match-case 的使用。   在学习match-case 的时候,你会发现,也有一个类似于联合类型操作符的用法,但请你要注意区别,它并不是联合类型操作,而是在 match-case 下独有的 or模式操作符 | ,它可以将多个具体相同逻辑的 case 语句简写成同一个   match status:       case 401 | 403 | 404:           print("Not allowed")       case _:           print("Something's wrong with the internet")   3. 通配符匹配任意对象 match-case 的出现有利于提高代码的可读性,让你的代码更加优雅,但同时要使用好它,也是有一些门槛的,特别是通配符的使用。   下边我举一些例子来进行讲解   在如下代码中,使用了通配符 _ 和 可变参数中的  * 符号   import sys   match sys.argv[1:]:       case ["quit"]:           print("exit")       case ["create", user]:     # 创建单个用户           print("create", user)       case ["create", *users]:  # 批量创建多个用户           for user in users:               print("create", user)       case _:           print("Sorry, I couldn't understand the argv")  最后一个 case 中的 _ 并不作为变量名,而表示一种特殊的模式,在前面的 case 中都未命中的情况下,该 case 会是最后的保障,能确保命中,它相当于 Go 语言中的 default 分支。   import "fmt"   func main() {       education := "本科"       switch education {       case "博士":           fmt.Println("我是博士")       case "研究生":           fmt.Println("我是研究生")       case "本科":           fmt.Println("我是本科生")       case "大专":           fmt.Println("我是大专生")       default:           fmt.Println("学历未达标..")       }   }   4. 使用可变参数 *args 第二个 case 和 第三个 case 非常的像,区别在于第三个 case中 users 前加了个 *,他跟原 Python 函数中的可变参数是一个用法,会匹配列表的多个值。   在该中表示可以从命令行参数中批量创建用户。

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!