知行编程网知行编程网  2022-08-04 08:00 知行编程网 隐藏边栏 |   抢沙发  41 
文章评分 0 次,平均分 0.0

Python 3.10正式发布,你尝鲜了吗?

本文参考自 Python官方文档 :Python Release Python 3.10.0 | Python.org[1]

在正值国庆假期人山人海的2021年10月4号,Python官方正式发布了Python3.10.0[2]。作为一只假期期间宅着不动的coding人,自然是第一时间体验了一波。相较于之前的版本,该版本有以下主要变更。

新的 Union Type表达

新版本简化了 Union Type 的使用 ,改为更为简洁的|

旧版:

 

新的版本:

 

二者完全等价:

 

这类变化在其他地方也相似:

f([1"abc"], None)

# 旧版: 
# typing.List[typing.Union[str, int]]
typing.List[str | int]
list[str | int]

# 旧版: 
# typing.Dict[str, typing.Union[int, float]]
typing.Dict[str, int | float]
dict[str, int | float]

 

该特性也可用于 isinstanceissubclass

, int|str)

# True 
issubclass(str, str|int)

 

zip 可选严格模式

zip新增可选参数strict, 当该选项为True时,传入zip的两个可迭代项长度必须相等,否则将抛出 ValueError

旧版(及不加此参数),当二者长度不等时,以长度较小的为准

 

设置strict为True

d:projectspythonlearnPy310探索.py in <module>
3 numbers = [1,2,3]
4 z = zip(names,numbers,strict=True)
----> 5 for each in z:
6     print(each)

ValueError: zip() argument 2 is shorter than argument 1

 

带括号的上下文管理器

with可以加括号了

 example):
    ...

with (
CtxManager1(),
CtxManager2()
):
...

with (CtxManager1() as example,
CtxManager2()):
...

with (CtxManager1(),
CtxManager2() as example):
...

with (
CtxManager1() as example1,
CtxManager2() as example2
):
...

 

 

显式类型别名

使用 TypeAlias 显式标注类型别名,提高可读性

旧的方式:

 a+b

 

可以看到,x很容易被搞混

新的方式:使用 TypeAlias表明这是个别名

 a+b

 

match...case语句

对,就是其他语言的switch-case,python终于提供了支持,还是加强版的

完整语法参见:PEP 634 -- Structural Pattern Matching: Specification | Python.org[3]

举几个例子:

基本的类型匹配:

)

 

subject:这在处理命令行参数的时候特别有用

)

 

也可以匹配对象:

class Student(Person):
def __init__(self, id: int) -> None:
self.id = id

class Teacher(Person):
def __init__(self, name: str) -> None:
self.name = name

a = Student(1)
# a = Student(2)
# a = Teacher("FunnySaltyFish")
match a:
case Student(id = 2):
print(f"这是位学生,且id正好是2")
case Student():
print(f"这是学生,id为{a.id}")
case Teacher():
print(f"这是老师, 姓名为{a.name}")

 

当然也可以匹配字典:

 

更复杂的还有结合Guard、匹配捕获等使用,具体可以参见:PEP 635 -- Structural Pattern Matching: Motivation and Rationale | Python.org[4]PEP 636 -- Structural Pattern Matching: Tutorial | Python.org[5]

更友好的报错提示

现在,当你的括号、引号未闭合时,python会抛出更加清晰明了的错误

File "

)

 

 was never closed

 

其他一些更新:

distutils 被弃用

推荐使用 setuptools

需要 OpenSSL 1.1.1 及以上版本
移除 Py_UNICODE编码API
PyUnicodeObject的wstr被弃用,并将在之后移除

完。摸鱼去了。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享