Python 3.10 来了,居然有这新特性!
大家好,我是一行
已经达到了而立之年的Python,最近发布了3.10版本
新版本添加了很多新的特性,其中最大的特性就莫过于还是安装新版本之后有些python包不支持还得回到原来版本🐶
不过话说回来,除了部分包不兼容以外,还是有很多好用的性能提升
其中最有帮助的就是就是报错更加智能化了
例如语法错误,很多年前作为小白的我遇到这个语法错误问题还跑过去问老师
毕竟百度搜索语法错误该怎么办,它回答不上来,最后老师给我指出来原因是少一个加一个括号,顿时无比尴尬
后来python性能优化给出了错误的位置在哪,但是有些程序即使给出了还是很难找出原因,所以这次升级,python就怕你不会改,将错误的原因也给标了出来
1错误提示
目前python里出现频率最高的错误有以下几种:
':'缺少:SyntaxError: expected ':'
','缺少:SyntaxError: invalid syntax. Perhaps you forgot a comma?
字典缺失值:SyntaxError: ':' expected after dictionary key
try没有块except或finally块:
SyntaxError: expected 'except' or 'finally' block
在比较中使用=代替==:
SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='?
这些日常常见的粗心错误,python直接给你提示并解释出来了,就差动手帮你改了
当然除此之外还有缩进错误、属性错误、名称错误都会有详细的提示,让你写的bug能够更加流畅
这个特性对于初学者来说还是非常nice的
2python
还有一个比较瞩目的新特性是添加了一个新的关键字:match
不像其他编程语言有switch,python之前一直没有,现在给加上了这个特性,而且还用match语句来代替它
match的通用语法如下,case从上到下将目标与语句中的每个模式进行比较,直到确认匹配为止
如果未确认完全匹配,则最后一种情况,通配符_(如果提供)将用作匹配情况。如果未确认完全匹配且不存在通配符大小写,则整个匹配块为空操作。
match subject:
case :
case :
case :
case _:
不像有些语言的switch只能匹配一种数据类型
而python3.10里的match作为super版的switch可以匹配文字、变量、类对象、位置参数,甚至还有嵌套模式、复杂模式和Guard
Guard就暂且翻译成守卫,就是在case后面可以加入一个if判断
如果守卫为假,match则继续尝试下一个案例块。请注意,值捕获发生在评估守卫之前:
match point:
case Point(x, y) if x == y:
print(f"The point is located on the diagonal Y=X at {x}.")
case Point(x, y):
print(f"Point is not on the diagonal.")
就是因为这样的新特性便出现了下面这样的神仙语句
如果不知道“软关键字”这个,肯定会提出疑问,关键字怎么能做变量呢?
这让我想起一个段子:
小明送给领导两个红包.
领导:你这是什么意思 小明:意思意思 领导:“你这就不够意思了.” 小明:“小意思,小意思.” 领导:“你这人真有意思.” 小明:“其实也没有别的意思.” 领导:“那我就不好意思了.” 小明:“是我不好意思.”
要求:分别解释每个“意思”的意思.
这里的意思就相当于python3.9推出的“软关键字”特性,不同的位置具有不同的意思,python也是通过不同位置来判断代码的具体意思
这已经非常的人性化了,就差跟我意思意思了~
3最后
那要不要升级最新版python呢?
一行的建议还是跟着你常用的包来确定,常用包支持python3.10就去升级,不支持就等等,也不差这一段时间
当然,python3.10还有很多非常有意思的更新内容,详细可以官网链接进行查看:
https://docs.python.org/3/whatsnew/3.10.html
我是一行,技术永不眠,我们下期见~
对了,一行用爬虫爬取了知乎里150000字的python学习攻略,并统计分析了这些年入百万的python大佬所推荐的Python书单,花了很长时间整理成电子书合集如下图所示,需要的可以添加一行微信好友「yihangpy」直接领取哦~