你好,我是 zhenguo

通过官网看到,Python 3.10 刚刚正式发布了!
我说两个新增的很香的功能,一个关于语法,另一个关于标注库里的函数。
1 match和case 语法
熟悉 C++ 的程序员对于switch和case不会陌生,但是对于Python 3.10以前,很遗憾,Python一直没有类似的语法,不过自从3.10开始Python终于有类似语法了!是 match和case,举例如下:
defhttp_error(status):
    match status:

        case 
400
:

return"Bad request"
        case 
401
 | 
403
 | 
404
:

return"Not allowed"
        case 
404
:

return"Not found"
        case 
418
:

return"I'm a teapot"
        case _:

return"Something's wrong with the Internet"
你看,与C++的switch和case用法是完全一样的!
2 更严谨的 zip
zip打包多个可迭代对象,配合for后接下来的操作以元组为基本单位,但是有一个有些致命的隐含问题,如下两个列表a,b 长度不一致,zip后丢失了a的元素 3:
In [
43
]: a=[
1
,
2
,
3
]                                                              


In [
44
]: b=[
'a'
,
'b'
]                                                            


In [
45
]: 
for
 i 
in
 zip(a,b): 

    ...:     print(i) 

    ...:                                                                        

(
1
'a'
)

(
2
'b'
)

为了解决这个问题,zip添加了一个布尔类型的参数 strict,这个变化也就是:
3.10以前zip的原型:
zip(*iterables)

3.10以后增加一个布尔类型参数strict,默认为False
zip(*iterables, strict=
False
)

只有当其为True时,打包的可迭代对象长度不一致时会抛异常;当为False时,与之前版本的zip完全相同,因此zip是完全向后兼容的。
以上就是2个比较有用的更新。
其他的一些变化还包括:
  • 新的类型标注特性
  • 重要的弃用、移除或限制,如PEP 632,弃用 distutils 模块。
  • 新的特性:带圆括号的上下文管理器
  • 更清楚的错误消息
继续阅读
阅读原文