Python 3.9¶
Python 3.9.0(最终版)已于 2020 年 10 月 5 日发布。3.9 的特性定义于 PEP 596,变更的详细说明可在 What's New in Python 3.9 中找到
特性 |
状态 |
|
从 C 扩展类型的方法快速访问模块状态 |
不相关 |
|
为 dict 添加联合运算符 |
已完成 [1] |
|
标准集合中的类型提示泛型 |
||
灵活的函数和变量注解 |
||
CPython 采用年度发布周期。但目标并非每年,而是每两个月发布一次 |
不相关 |
|
放宽对装饰器的语法限制 |
||
IANA 时区数据库现在以 zoneinfo 模块的形式出现在标准库中 |
||
用于移除前缀和后缀的字符串方法 |
||
CPython 现在使用基于 PEG 的新解析器 |
不相关 |
其他语言变更:
__import__() 现在抛出 ImportError 而非 ValueError |
已完成 |
Python 现在会获取命令行中指定的脚本文件名的绝对路径(例如:python3 script.py):__main__ 模块的 __file__ 属性变为绝对路径,而非相对路径 |
|
默认情况下,为获得最佳性能,errors 参数仅在首次编码/解码错误时被检查,并且对于空字符串有时会忽略 encoding 参数 |
|
对于所有非零的 n,"".replace("", s, n) 现在返回 s 而非空字符串。这现在与 "".replace("", s) 保持一致 |
|
现在任何有效的表达式都可以用作装饰器。此前,其语法限制要严格得多 |
|
现在禁止并行运行 aclose() / asend() / athrow(),并且 ag_running 现在反映异步生成器的实际运行状态 |
|
调用 __iter__ 方法时发生的意外错误,不再被 in 运算符以及 operator 模块的 contains()、indexOf() 和 countOf() 函数中的 TypeError 所掩盖 |
|
未加括号的 lambda 表达式不能再作为推导式和生成器表达式中 if 子句的表达式部分 |
内置模块的变更:
出于重大的安全考虑,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 的情况下也是如此,就像超时为正值时一样 |
|
当对 ssl.SSLSocket 套接字调用不兼容的方法时,asyncio 现在会抛出 TyperError |
|
垃圾回收不再在被复活的对象上阻塞 |
|
新增了函数 gc.is_finalized(),用于检查某个对象是否已被垃圾回收器终结 |
|
扩展了 math.gcd() 函数以处理多个参数。此前它仅支持两个参数 |
|
新增了 math.lcm():返回指定参数的最小公倍数 |
|
新增了 math.nextafter():返回 x 朝向 y 方向之后的下一个浮点数值 |
|
新增了 math.ulp():返回浮点数最低有效位的值 |
|
暴露了 Linux 专用的 os.pidfd_open() 和 os.P_PIDFD |
|
os.unsetenv() 函数现在在 Windows 上也可用 |
已完成 |
os.putenv() 和 os.unsetenv() 函数现在始终可用 |
已完成 |
新增了 os.waitstatus_to_exitcode() 函数:将 wait 状态转换为退出码 |
|
新增了 random.Random.randbytes 方法:生成随机字节 |
|
新增了 sys.platlibdir 属性:平台专用库目录的名称 |
|
此前,sys.stderr 在非交互式时采用块缓冲。现在 stderr 默认始终采用行缓冲 |
|
注意事项