Python每个版本都会或多或少新增一些新特性,虽然要一直跟着新版本走是不太可能的,但是一些新特性还是很有用的,比如类型注解,f-format等等特性都是慢慢加进来的。这里简单记录下3.10感兴趣的新特性,省得老是查来查去。
Python3.10发布于2021-10-04。本文都是参考官方文档Python 3.10 有什么新变化。
圆括号管理器
Python使用缩进标记语法,因此是不能随便换行的,但是有时候一行写的实在是臃肿,现在可以使用类似下面这样的语法来让一行的结构更直观易读了
1 | with ( |
更清楚的错误信息
现在Python解释器也能更清楚地标记括号导致的语法错误产生的位置了,更多的异常消息,更详细的提示,错误名称建议等等。
(Python有时候的错误信息确实相当迷惑)。
结构化模式匹配(switch)
Python终于有“switch”语法了,当然他们自己叫做模式匹配。
模式匹配的语法如下
1 | match subject: |
只会进入匹配到的模式,后续不会执行。所以也不需要break。
和C中的switch结构比较像,需要注意的是
_类似default。case中可以使用
|组合多个值,如1
2case 401 | 403 | 404:
return "Not allowed"如果有多个case匹配,只会进入第一个匹配到的case。
case中可以对match传入的变量解包。
match也可以传入一个类。
case可以嵌套,如
case [Point(0, 0)]通配符
_其实可以使用在case任意位置,如1
2case ('error', code, _):
print(f"An error {code} occurred.")模式还可以添加一个if约束项,如
1
2case Point(x, y) if x == y:
print(f"The point is located on the diagonal Y=X at {x}.")
基本语法就是这些。
类型提示的新特性
自从Python引入了类型注解之后,很多很多事情变得更方便了。3.10带来了更多的类型提示的特性。
联合类型运算符
|可以使用该运算符表示多种类型了,如
1
2def square(number: int | float) -> int | float:
return number ** 2可以表示
int或float类型。显示的类型别名
虽然原来类型标注也是使用类型别名,但是很容易和普通的赋值混淆,现在可以使用
typing模块中的TypeAlias显示地声明类型别名了,如1
2StrCache: TypeAlias = 'Cache[str]' # a type alias
LOG_PREFIX = 'LOG[DEBUG]' # a module constant
比较有趣的Python3.10新增特性基本上就这些了。