参考文档:
Python Documentation by Version | Python.org
3.7
改进了 异步 并发 二进制 十进制 日期时间 http ip地址 socket xml 数据库
3.8
有新的语法:=
在这个例子中,赋值表达式有助于避免调用 len()两次:
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
仅位置参数
有一个新的函数参数语法/
来指示某些函数参数必须在位置上指定并且不能用作关键字参数
在以下示例中,参数a和b仅是位置参数,而c或d可以是位置或关键字,而e或f必须是关键字:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
新importlib.metadata模块提供(临时)支持从第三方包读取元数据。例如,它可以提取已安装包的版本号、入口点列表等:
>>> # Note following example requires that the popular "requests" >>> # package has been installed. >>> >>> from importlib.metadata import version, requires, files >>> version('requests') '2.22.0' >>> list(requires('requests')) ['chardet (<3.1.0,>=3.0.2)'] >>> list(files('requests'))[:5]
改进了异步 时间 csv json 路径库 socket 线程 xml
3.9
字典合并和更新运算符
合并 ( |
) 和更新 ( |=
) 运算符已添加到内置 dict类中。这些补充了合并词典的现有方法dict.update
和 方法。{**d1, **d2}
删除前缀和后缀的新字符串方法
str.removeprefix(prefix)并 str.removesuffix(suffix)已添加以轻松删除字符串中不需要的前缀或后缀。还添加了相应的 bytes
、bytearray
和collections.UserString
方法。看PEP 616的完整描述。(由 Dennis Sweeney 在 bpo-39939 中贡献。)
改进了异步和并发
现在支持 IPv6 Scoped Addresses
改进了部分http和socket
What’s New In Python 3.9 — Python 3.9.9 documentation
3.10
带括号的上下文管理器
with (
CtxManager1() as example1,
CtxManager2() as example2,
CtxManager3() as example3,
):
...
结构模式匹配
def http_error(status):
match status:
case 400:
return "Bad request"
case 404:
return "Not found"
case 418:
return "I'm a teapot"
case _:
return "Something's wrong with the internet"
您可以使用|(“或”)将多个文字组合在一个模式中:
case 401 | 403 | 404:
return "Not allowed"
# point is an (x, y) tuple
match point:
case (0, 0):
print("Origin")
case (0, y):
print(f"Y={y}")
case (x, 0):
print(f"X={x}")
case (x, y):
print(f"X={x}, Y={y}")
case _:
raise ValueError("Not a point")
新型联合运算符|
引入了一种新的类型联合运算符,它启用了语法。这提供了一种更清晰的方式来表达“X 型或 Y 型”而不是使用,尤其是在类型提示中。X | Ytyping.Union