重磅来袭!Python3.10正式版发布了!我还在用3.6

时间:2022-10-09 18:06:34 | 浏览:2867

来源:juejin.cn/post/7015590447745613854Python 3.10正式发布,你尝鲜了吗?本文参考自 Python官方文档 :Python Release Python 3.10.0 | Python.org[1

来源:
juejin.cn/post/7015590447745613854

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 的使用 ,改为更为简洁的|

旧版:

from typing import Union
a: Union[int, str] = 1

新的版本:

a: str | int = 1

二者完全等价:

Union[int, str] == int | str # True

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

# 旧版:
# def f(list: List[Union[int, str]], param: Optional[int]) -> Union[float, str]
def f(list: List[int | str], param: int | None) -> float | str:
pass
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

# True
isinstance("FunnySaltyFish", int|str)
# True
issubclass(str, str|int)

zip 可选严格模式

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

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

names = ["a","b","c","d"]
numbers = [1,2,3]
z = zip(names,numbers)
for each in z:
print(each)
# ("a", 1)
# ("b", 2)
# ("c", 3)

设置strict为True

# ...
z = zip(names,numbers,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可以加括号了

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

import pathlib
p = pathlib.Path
p1 = p/"text1.txt" # 内容:文本1的内容
p2 = p/"text2.txt" # 内容:文本2的内容
with(
p1.open(encoding="utf-8") as f1,
p2.open(encoding="utf-8") as f2
):
print(f1.read, f2.read, sep=" ")
# 文本1的内容
# 文本2的内容

显式类型别名

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

旧的方式:

x = int
def plus_int(a:x,b:x) -> x:
return a+b

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

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

from typing import TypeAlias
x : TypeAlias = int
def plus_int(a:x,b:x) -> x:
return a+b

match...case语句

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

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

举几个例子:

基本的类型匹配:

day = 6
match day:
case 1:
print("星期一")
case 6 | 7:
print("周末")
case _ :
print("其他情况")

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

"""
@copyright : [FunnySaltyFish](https://funnysaltyfish.github.io)
@date : 2021/10/05 21:08:42
"""
command = "save 1.txt"
# 试着把command改成 list / copy 1.txt 2.txt 看看效果
match command.split(" "):
case ["list"]:
print("列出文件~")
case ["save", file_name]:
print(f"保存文件到 {file_name}")
case ["copy",source,target]:
print(f"拷贝 {source} -> {target}")

也可以匹配对象:

class Person:
pass
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}")

当然也可以匹配字典:

d = {
"name" : "李四", # 张三
"age" : 18,
"hobby" : "阅读"
}
match d:
case {"name":"张三", **args}:
# **收集其他参数
print("这是张三", args) # 这是张三 {"age": 18, "hobby": "阅读"}
case {"name" : name , "age" : age, "hobby": hobby}:
print(f"我叫{name}, 今年{age}岁, 喜欢{hobby}") #我叫李四,今年18岁,喜欢阅读

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

更友好的报错提示

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

str = "未闭合的str
File "d:projectspythonlearnPy310探索.py", line 90
str = "未闭合的str
^
SyntaxError: unterminated string literal (detected at line 90)
 arr = [1, 2, 2, 3
File "d:projectspythonlearnPy310探索.py", line 91
arr = [1, 2, 2, 3
^
SyntaxError: "[" was never closed

其他一些更新:

distutils 被弃用

推荐使用 setuptools

需要 OpenSSL 1.1.1 及以上版本

移除 Py_UNICODE编码API

PyUnicodeObject的wstr被弃用,并将在之后移除

完。摸鱼去了。

参考资料

[1]

https://www.python.org/downloads/release/python-3100/: https://link.juejin.cn?target=https%3A%2F%2Fwww.python.org%2Fdownloads%2Frelease%2Fpython-3100%2F

[2]

https://www.python.org/downloads/release/python-3100/: https://link.juejin.cn?target=https%3A%2F%2Fwww.python.org%2Fdownloads%2Frelease%2Fpython-3100%2F

[3]

https://www.python.org/dev/peps/pep-0634/#id25: https://link.juejin.cn?target=https%3A%2F%2Fwww.python.org%2Fdev%2Fpeps%2Fpep-0634%2F%23id25

[4]

https://www.python.org/dev/peps/pep-0635/#id15: https://link.juejin.cn?target=https%3A%2F%2Fwww.python.org%2Fdev%2Fpeps%2Fpep-0635%2F%23id15

[5]

https://www.python.org/dev/peps/pep-0636/: https://link.juejin.cn?target=https%3A%2F%2Fwww.python.org%2Fdev%2Fpeps%2Fpep-0636%2F

相关资讯

重磅!宜昌,“330”!

3月28日下午,宜昌“330”三峡国际人才日新闻发布会在三峡日报社10楼宜昌市新闻发布中心举行。会上介绍宜昌“330”三峡国际人才日的有关情况并回答记者提问。现场图●发布人商亮 宜昌市委组织部副部长范绪忠共青团宜昌市委书记邓玉华宜昌市教育局

重磅!郑州都市圈扩容为“1+8”!到2025年GDP力争达到6万亿元

顶端新闻·河南商报记者 王访贤/文中心城市和城市群正在成为承载发展要素的主要空间形式。顺应这一经济规律,河南省委、省政府站位新发展格局、国家区域发展战略布局和中原城市群建设全局,对河南省区域发展格局作出​了重塑性调整,将洛阳、平顶山、漯河、

图解Python算法

普通程序员,不学算法,也可以成为大神吗?对不起,这个,绝对不可以。可是算法好难啊~~看两页书就想睡觉……所以就不学了吗?就一直当普通程序员吗?如果有一本算法书,看着很轻松……又有代码示例……又有讲解……怎么会有那样的书呢?哎呀,最好学了算法

python10款好用的编译器和解释器

Python 是一门对初学者友好的编程语言,是一种多用途的、解释性的和面向对象的高级语言。它拥有非常小的程序集,非常易于学习、阅读和维护。其解释器可在Windows、Linux 和 Mac OS 等多种操作系统上使用。它的可移植性和可伸缩性

苹果避坑指南这三款iPhone再便宜也不要买

虽说,几乎每一代iPhone无论是从产品性能、做工甚至是设计都能成为行业中的标杆性产品,但在iPhone庞大的产品线中有些产品咱们还是尽量别去碰,尤其是以下这三款,甭管降价有多猛,产品有多便宜,有多少Up主推荐,大家都要慎入啊!苹果避坑指南

1200万像素有什么好苹果iPhone手机为何依旧坚持

转眼间,已经到了苹果iPhone面世的第16年。从初代iPhone到现在的iPhone13系列,给我们带来了许多经典与回忆。但让许多朋友不解的是,在手机像素动辄过亿的时代,iPhone依旧坚持1200万像素的“初心”。回首初代iPhone,

2020GNEC新物流·新基建峰会正式启动

文丨高彩红2018年全球智慧物流峰会上,马云“点燃”了物流新时代——“新物流”的概念被提出。同样是2018年,中央经济工作会议上,“新基建”被首次提出,明确了加快5G商用步伐,加强人工智能、工业互联网、物联网等新型基础设施建设。新物流与新基

重磅奇瑞“混改”之二:华泰收购奇瑞控股22.86%的股权

江湖传言奇瑞汽车被宝能集团收购,宝能将成为奇瑞汽车第一大股东,针对这一传闻,一张疑似尹同跃辟谣的图传出,尹同跃怒批“胡说八道”。 疑似尹同跃“辟谣图” 自主车企曾经的老大奇瑞汽车,居然落得被“造车新势力”——宝能集团收购的地步,

出行新选择!白云机场琶洲城市候机楼今起正式投入运营

今日(10月10日)上午,位于珠江河畔、毗邻琶洲会展中心的广州白云国际机场琶洲城市候机楼正式开门迎客。琶洲城市候机楼位于广州市海珠区会展东路1号香格里拉大酒店,距琶洲会展中心仅500米,距白云机场35公里,车程约30分钟,近地铁8号线。店内

《2022中、欧国际近视手术白皮书》重磅发布

5月22日,中南大学爱尔眼科学院、爱尔眼科研究所联合发布《2022中、欧国际近视手术白皮书》。继去年发布《国人近视手术白皮书》后,今年5月22日,中南大学爱尔眼科学院、爱尔眼科研究所再次升级发布《2022中、欧国际近视手术白皮书》大数据报告

友情链接

天天财经元宇宙中国SEO域名抢注宝宝起名网网站监控上饶新闻资讯网湖北旅游网会展活动网儿童玩具批发资讯网奢侈品二手回收网娱乐圈网浙江旅游网南京交友相亲网LV包回收网贵州茅台A股西安旅游攻略网信用卡申请中心鹰潭新闻资讯网温州新闻头条网免费算姻缘网出国留学网NFT数字藏品平台大全qq空间相册老黄历官网斯达半导A股唐氏起名网广州交友相亲网周公解梦官网免费抽签网曼谷旅游网双子座星座网生肖马运势网处女座星座网摄影爱好者天天基金行情网
python编程教学网-python数据库开发教程、python基础知识入门、python数据库编程入门、python语法基础、python下载安装教程、python下载手机版、python翻译器下载手机版、python翻译器代码、python语言翻译、python基础代码、python编程自学网。
python编程教学网 dadeji.cn©2022-2028版权所有