Python 3.9

Python 3.9.0(最终版本)于2020年10月5日发布。3.9的特性在 PEP 596 中定义,有关更改的详细描述可以在 What’s New in Python 3.9 中找到

特性

状态

PEP 573

从C扩展类型的方法快速访问模块状态

不相关的

PEP 584

字典中增加了联合操作符

完成 [1]

PEP 585

在标准集合中键入提示泛型

PEP 593

灵活的函数和变量注释

PEP 602

CPython采用年度发布周期。目标是两个月的发布周期而不是每年

不相关的

PEP 614

放宽对修饰符的语法限制

PEP 615

IANA时区数据库现在存在于zoneinfo模块的标准库中

PEP 616

字符串方法来删除前缀和后缀

PEP 617

CPython现在使用基于PEG的新解析器

不相关的

其他语言变化:

__import__() 现在引发*ImportError*而不是 ValueError

完成

Python现在获取命令行上指定的脚本文件名的绝对路径(例如:python3 script.py): __main__ 模块的*__file__* 属性成为绝对路径,而不是相对路径

默认情况下,为了获得最佳性能,只在出现第一个编码/解码错误时检查errors参数,对于空字符串,有时会忽略encoding参数

“”.replace(“”, s, n) 现在对所有非零n返回*s*,而不是空字符串。它现在与*””.replace(“”, s)*一致

现在,任何有效的表达式都可以用作装饰器。以前,语法的限制要严格得多

aclose ()/* asend()*/* athrow()*的并行运行现在是禁止的,* ag_running*现在反映了异步生成器的实际运行状态

调用*__iter__* 方法时的意外错误在 in 运算符和 operator 模块中的 contains()、indexOf() 和 countOf() 函数中不再被 TypeError 掩盖

未加括号的 lambda 表达式不能再作为推导式和生成器表达式中的 if 子句的表达式部分

对内置模块的更改:

asyncio

由于严重的安全问题,不再支持*asyncio.loop.create_datagram_endpoint()*的reuse_address参数

增加了一个新的协程*shutdown_default_executor()*,它为等待*ThreadPoolExecutor*完成关闭的默认执行程序调度关闭。此外,*asyncio.run()*已更新为使用新的协程。

添加了*asyncio.PidfdChildWatcher*,一个特定于linux的子监视器实现,轮询处理文件描述符

添加一个新的*coroutine asyncio.to_thread()*

当由于超时而取消任务时,*asyncio.wait_for()*现在将等待直到取消完成,同样在timeout <= 0的情况下,就像正超时一样

asyncio*现在在使用*ssl.SSLSocket*套接字调用不兼容方法时会引发 *TyperError

gc

垃圾收集不会阻塞复活的对象

增加了一个新的函数 gc.is_finalized() 来检查一个对象是否已经被垃圾回收器完成

math

扩展了 math.gcd() 函数以处理多个参数。以前,它只支持两个论点

增加了 math.lcm(): 返回指定参数的最小公倍数

增加了 math.nextafter(): 返回x之后朝向y的下一个浮点值

增加了 math.ulp(): 返回浮点数的最低有效位的值

os

暴露了特定于linux的*os.pidfd_open()* 和*os.P_PIDFD*

*os.unsetenv()*函数现在在Windows上也可用

完成

os.putenv() 和*os.unsetenv()* 函数现在总是可用的

完成

增加了*os.waitstatus_to_exitcode()*函数:将等待状态转换为退出代码

random

增加了一个新的 random.Random.randbytes 方法:生成随机字节

sys

增加了一个新的 sys.platlibdir 属性:特定于平台的库目录名

以前,*sys.stderr*在非交互式时被块缓冲。现在stderr默认为始终行缓冲

笔记