改进的模块¶
argparse¶
为 add_argument() 和 add_parser() 方法添加了 deprecated 形参,以允许弃用命令行选项、位置参数和子命令。 (由 Serhiy Storchaka 在 gh-83648 中贡献。)
array¶
增加了 'w' 类型码 (Py_UCS4) 表示 Unicode 字符。 它应被用来代替已弃用的 'u' 类型码。 (由 Inada Naoki 在 gh-80480 中贡献。)
通过实现 clear() 方法将 array.array 注册为 MutableSequence。 (由 Mike Zimin 在 gh-114894 中贡献。)
ast¶
现在 ast 模块中节点类型的构造器对其接受的参数要求更为严格,并在参数被省略时有更易理解的行为。
如果在构造实例时某个 AST 节点上的可选字段没有被作为参数包括在内,则该字段现在将被设为 None。 类似地,如果某个列表字段被省略,则该字段现在将被设为空列表,而如果某个 expr_context 字段被省略,则它将默认为 Load()。 (之前,在所有情况下,新构造的 AST 节点实例上的相应属性都将缺失。)
在所有其他情况下,当需要的参数被省略时,节点构造器将发出 DeprecationWarning。 这在 Python 3.15 中将会引发异常。 类似地,将关键字参数传入一个未映射到 AST 节点上的字段的构造器的做法现在已被弃用,并且在 Python 3.15 中将会引发异常。
这些更改将不会应用于用户自定义的 ast.AST 子类,除非该类选择通过设置 AST._field_types 映射的方式加入新的行为。
(由 Jelle Zijlstra 在 gh-105858, gh-117486 和 gh-118851 中贡献。)
现在 ast.parse() 接受一个可选参数 optimize,它会被传递给 compile()。 这使得获取已优化的 AST 成为可能。 (由 Irit Katriel 在 gh-108113 中贡献。)
asyncio¶
现在 asyncio.as_completed() 将返回一个即是 asynchronous iterator 又是基本的产生 可等待对象 的 iterator 的对象。 由异常迭代产生的可等待对象包括被传入的原始 Task 或 Future 对象,使得将结果与正在完成的任务相关联更为容易。 (由 Justin Arthur 在 gh-77714 中贡献。)
现在当服务器被关闭时 asyncio.loop.create_unix_server() 会自动移除 Unix 套接字。 (由 Pierre Ossman 在 gh-111246 中贡献。)
现在当附带一个空字节串对象调用时 DatagramTransport.sendto() 将发送零长度的数据报。 现在当计算缓冲区大小时传输控制流还会将数据报标头纳入考量。 (由 Jamie Phan 在 gh-115199 中贡献。)
增加了 Queue.shutdown 和 QueueShutDown 用于管理队列终结。 (由 Laurie Opperman 和 Yves Duprat 在 gh-104228 中贡献。)
增加了 Server.close_clients() 和 Server.abort_clients() 方法,它们会以更强制的方式关闭 asyncio 服务器。 (由 Pierre Ossman 在 gh-113538 中贡献。)
在 StreamReader.readuntil() 中接受一个由分隔符组成的元组,当遇到其中之一时就会停止。 (由 Bruce Merry 在 gh-81322 中贡献。)
改进了 TaskGroup 在外部的取消操作与内部的取消操作发生冲突时的行为。 例如,当嵌套两个任务分组并且两者同时在某个子任务中遇到异常时,外层的任务分组有可能被挂起,因为其内部的取消操作已由内层的任务分组进行处理。
对于任务分组在外部被取消时同时必须引发 ExceptionGroup 的情况,现在它将调用父任务的 cancel() 方法。 这样可以确保 CancelledError 会在下一次 await 时被引发,因此取消操作不会丢失。, so the cancellation is not lost.
这些更改的一个附加好处是现在任务组会保留取消操作计数 (cancelling())。
为了处理某些边界情况,现在 uncancel() 可以在取消操作计数达到零时重置未写入文档的 _must_cancel 旗标。
(受到由 Arthur Tacca 在 gh-116720 中报告的问题的启发。)
当在一个未激活的 TaskGroup 上调用 TaskGroup.create_task() 时,给定的协程将被关闭 (这将防止引发有关给定的协程从未被等待的 RuntimeWarning)。 (由 Arthur Tacca 和 Jason Zhang 在 gh-115957 中贡献。)
名为 create_task 的函数和方法新增了一个 **kwargs 参数,它会被传递给任务构造器。 这项更改是在 3.13.3 意外添加的,并且破坏了自定义任务工厂函数的 API 约定。 某些第三方任务工厂对此实现了绕过手段。 在 3.13.4 及之后的发布版中旧的工厂约定再次被遵守(直到 3.14)。 要让绕过手段保持有效,附加的 **kwargs 参数仍然允许传递额外关键字参数给 Task 以及自定义任务工厂。
这会影响下列函数和方法: asyncio.create_task(), asyncio.loop.create_task(), asyncio.TaskGroup.create_task()。 (由 Thomas Grainger 在 gh-128307 中贡献。)
base64¶
增加了 z85encode() 和 z85decode() 函数用于将 bytes 编码为 Z85 data 和将 Z85 编码的数据解码为 bytes。 (由 Matan Perelman 在 gh-75299 中贡献。)
compileall¶
工作线程和进程的默认数据现在是使用 os.process_cpu_count() 而不是 os.cpu_count() 来选择的。 (由 Victor Stinner 在 gh-109649 中贡献。)
concurrent.futures¶
工作线程和进程的默认数据现在是使用 os.process_cpu_count() 而不是 os.cpu_count() 来选择的。 (由 Victor Stinner 在 gh-109649 中贡献。)
configparser¶
现在 ConfigParser 具有对未命名节的支持,这将允许使用最高层级的键值对。 此特性可通过新增的 allow_unnamed_section 形参来启用。 (由 Pedro Sousa Lacerda 在 gh-66449 中贡献。)
copy¶
新增的 replace() 函数和 replace 协议 使得创建经修改的对象副本更为简单。 这在操作不可变对象时特别有用。 以下类型将支持 replace() 函数并实现了 replace 协议:
collections.namedtuple()
dataclasses.dataclass
datetime.datetime, datetime.date, datetime.time
inspect.Signature, inspect.Parameter
types.SimpleNamespace
代码对象
任何用户自定义类也可以通过定义 __replace__() 方法来支持 copy.replace()。 (由 Serhiy Storchaka 在 gh-108751 中贡献。)
ctypes¶
作为必要的内部重构的一个后果,内部元类的初始化现在将发生于 __init__ 中而不是 __new__ 中。 这会影响子类化这些内部元类以提供自定义初始化的项目。 一般而言:
调用 super().__new__ 之后在 __new__ 中完成的自定义逻辑应当移至 __init__。
要创建一个类,需调用相应的元类,而不仅是该元类的 __new__ 方法。
请参阅 gh-124520 了解相关讨论和对某些受影响项目的修改的链接。
ctypes.Structure 对象新增了一个 _align_ 属性以允许显式地指定发往内存的结构体对齐方式。 (由 Matt Sanderson 在 gh-112433 中贡献。)
dbm¶
增加 dbm.sqlite3,一个实现了 SQLite 后端的新模块,并将其设为默认的 dbm 后端。 (由 Raymond Hettinger 和 Erlend E. Aasland 在 gh-100414 中贡献。)
允许通过新增的 gdbm.clear() 和 ndbm.clear() 方法移除数据库中的所有条目。 (由 Donghee Na 在 gh-107122 中贡献。)
dis¶
将 dis 模块的函数的输出修改为显示跳转目标和异常处理器的逻辑标签,而不是偏移量。 可以使用新的 -O 命令行选项或 show_offsets 参数来添加偏移量。 (由 Irit Katriel 在 gh-112137 中贡献。)
get_instructions() 不再将缓存条目表示为单独的指令。 作为替代,它会将它们作为 Instruction 的组成部分返回,放在新的 cache_info 字段中。 传给 get_instructions() 的 show_caches 参数已被弃用并且不再有任何效果。 (由 Irit Katriel 在 gh-112962 中贡献。)
doctest¶
现在 doctest 输出默认是彩色的。 此特性可通过新增的 PYTHON_COLORS 环境变量和传统的 NO_COLOR 和 FORCE_COLOR 环境变量来控制。 另请参阅 控制颜色。 (由 Hugo van Kemenade 在 gh-117225 中贡献。)
现在 DocTestRunner.run() 方法会统计已跳过测试的数量。 增加了 DocTestRunner.skips 和 TestResults.skipped 属性。 (由 Victor Stinner 在 gh-108794 中贡献。)
email¶
现在带有嵌入的换行符的标头在输出时会加上引号。 现在 generator 会拒绝序列化(写入)不正确地折叠或分隔的标头,例如将被解析为多个标头或与相邻数据合并的标头等。 如果你需要禁用此安全特性,请设置 verify_generated_headers。 (由 Bas Bloemsaat 和 Petr Viktorin 在 gh-121650 中贡献。)
现在 getaddresses() 和 parseaddr() 会在更多遇到无效 email 地址的情况下返回 ('', '') 对非可能不准确的值。 这两个函数新增了可选的 strict 形参 (默认为 True)。 要获取旧版本的行为 (接受错误格式的输入),请使用 strict=False。 getattr(email.utils, 'supports_strict_parsing', False) 可被用于检查 strict 形参是否可用。 (由 Thomas Dwyer 和 Victor Stinner 针对 gh-102988 贡献以改进 CVE 2023-27043 修正。)
enum¶
EnumDict 被改为公有以更好的支持子类化 EnumType。
fractions¶
现在 Fraction 对象支持用于填充、对齐、正负号处理、最小宽度和分组的标准 格式说明迷你语言 规则。 (由 Mark Dickinson 在 gh-111320 中贡献。)
glob¶
增加了 translate(),这是个用来将具有 shell 风格通配符的路径说明转换为正则表达式的函数。 (由 Barney Gale 在 gh-72904 中贡献。)
importlib¶
现在 importlib.resources 中的下列函数允许访问资源目录(或树),并使用多个位置参数(现在文本读取函数中的 encoding 和 errors 参数是仅限关键字参数):
is_resource()
open_binary()
open_text()
path()
read_binary()
read_text()
这些函数将不再被弃用也不会被加入移除计划。 (由 Petr Viktorin 在 gh-116608 中贡献。)
contents() 仍然被弃用而应改用功能完整的 Traversable API。 不过,目前还没有移除它的计划。 (由 Petr Viktorin 在 gh-116608 中贡献。)
io¶
现在 IOBase 最终化器会使用 sys.unraisablehook 来将由 close() 方法引发的错误写入日志。 在之前版本中,错误在默认情况下会被静默地忽略,而只有在 Python 开发模式 或在使用 Python 调试构建版 时才会被写入日志。 (由 Victor Stinner 在 gh-62948 中贡献。)
ipaddress¶
增加了 IPv4Address.ipv6_mapped 特征属性,它将返回映射 IPv4 的 IPv6 地址。 (由 Charles Machalow 在 gh-109466 中贡献。)
修正了 IPv4Address, IPv6Address, IPv4Network 和 IPv6Network 中 is_global 和 is_private 的行为。 (由 Jakub Stasiak 在 gh-113171 中贡献。)
itertools¶
batched() 新增了 strict 形参,它会在最后一批次数据小于指定批准大小时引发 ValueError。 (由 Raymond Hettinger 在 gh-113202 中贡献。)
marshal¶
在模块函数中增加了 allow_code 形参。 传入 allow_code=False 将防止在 Python 各版本间不兼容的代码对象的序列化和反序列化。 (由 Serhiy Storchaka 在 gh-113626 中贡献。)
math¶
新增函数 fma() 可执行合并的乘法-加法运算。 此函数只需一轮操作即可计算 x * y + z,从而避免了任何中间步骤导致的精度损失。 它包装了 C99 所提供的 fma() 函数,并且遵从针对特殊情况的 IEEE 754 "fusedMultiplyAdd" 运算规范。 (由 Mark Dickinson 和 Victor Stinner 在 gh-73468 中贡献。)
mimetypes¶
增加了 guess_file_type() 函数用于根据文件系统路径来猜测 MIME 类型。 在 guess_type() 中使用路径的做法现在已是 soft deprecated。 (由 Serhiy Storchaka 在 gh-66543 中贡献。)
mmap¶
现在 mmap 在 Windows 上当被映射的内存由于文件系统错误或访问限制而不可访问时将获得保护以避免崩溃。 (由 Jannis Weigend 在 gh-118209 中贡献。)
mmap 具有新的 seekable() 方法将在需要可定位的文件型对象时被使用。 现在 seek() 方法将返回一个新的绝对位置。 (由 Donghee Na 和 Sylvie Liberman 在 gh-111835 中贡献。)
mmap 新增了 UNIX 专属的 trackfd 形参用来控制文件描述符的复制;如为假值,则由 fileno 指定的文件描述符将不会被复制。 (由 Zackery Spytz 和 Petr Viktorin 在 gh-78502 中贡献。)
multiprocessing¶
工作线程和进程的默认数据现在是使用 os.process_cpu_count() 而不是 os.cpu_count() 来选择的。 (由 Victor Stinner 在 gh-109649 中贡献。)
os¶
增加了 process_cpu_count() 函数用于获取当前进程的调用方线程可以使用的逻辑 CPU 核心数量。 (由 Victor Stinner 在 gh-109649 中贡献。)
cpu_count() 和 process_cpu_count() 可通过新的环境变量 PYTHON_CPU_COUNT 或新的命令行选项 -X cpu_count 来覆盖。 此选项对于需要在不修改应用程序代码或容器本身的情况下限制一个容器系统的 CPU 资源的用户会很有用处。 (由 Donghee Na 在 gh-109595 中贡献。)
通过 timerfd_create(), timerfd_settime(), timerfd_settime_ns(), timerfd_gettime(), timerfd_gettime_ns(), TFD_NONBLOCK, TFD_CLOEXEC, TFD_TIMER_ABSTIME 和 TFD_TIMER_CANCEL_ON_SET 增加了针对 Linux 的 计算器文件描述符 的 低层级接口。 (由 Masaru Tsuchiyama 在 gh-108277 中贡献。)
在 Windows 上现在同时增加了对 lchmod() 和 chmod() 的 follow_symlinks 参数的支持。 请注意在 Windows 上 lchmod() 中的 follow_symlinks 的默认值为 False。 (由 Serhiy Storchaka 在 gh-59616 中贡献。)
在 Windows 上现在同时增加了 fchmod() 和对 chmod() 中的文件描述符的支持。 (由 Serhiy Storchaka 在 gh-113191 中贡献。)
在 Windows 上,mkdir() 和 makedirs() 现在支持传入 mode 值 0o700 以对新目录应用访问控制。 这会隐式地影响 tempfile.mkdtemp() 并可缓解 CVE 2024-4030。 其他的 mode 值仍然会被忽略。 (由 Steve Dower 在 gh-118486 中贡献。)
现在 posix_spawn() 可接受 None 作为 env 参数,这将让新产生的进程使用当前进程的环境。 (由 Jakub Kulik 在 gh-113119 中贡献。).)
在支持 posix_spawn_file_actions_addclosefrom_np() 的平台上 posix_spawn() 现在可以在 file_actions 形参中使用 POSIX_SPAWN_CLOSEFROM 属性。 (由 Jakub Kulik 在 gh-113117 中贡献。)
os.path¶
增加了 isreserved() 用于检查一个路径在当前系统中是否为保留路径。 此函数仅在 Windows 上可用。 (由 Barney Gale 在 gh-88569 中贡献。)
在 Windows 上,isabs() 将不再把以恰好一个斜杠 (\ 或 /) 开头的路径视为绝对路径。 (由 Barney Gale 和 Jon Foster 在 gh-44626 中贡献。)
现在即使文件不可访问 realpath() 也能够解析 MS-DOS 风格的文件名。 (由 Moonsik Park 在 gh-82367 中贡献。)
pathlib¶
增加了 UnsupportedOperation,它会在一个路径操作不受支持时代替 NotImplementedError 被引发。 (由 Barney Gale 在 gh-89812 中贡献。)
新增了一个用于根据 'file' URI (file:///) 来创建 Path 对象的构造器 Path.from_uri()。 (由 Barney Gale 在 gh-107465 中贡献。)
增加了 PurePath.full_match() 用于匹配带有 shell 风格通配符的路径,包括递归通配符 "**"。 (由 Barney Gale 在 gh-73435 中贡献。)
增加了 PurePath.parser 类属性以存储用于低层级路径解析与合并的 os.path 实现。 这可以是 posixpath 或 ntpath。
为 Path.glob() 和 rglob() 增加了 recurse_symlinks 仅限关键字参数。 (由 Barney Gale 在 gh-77609 中贡献。)
现在当给出以 "**" 结束的模式时 Path.glob() 和 rglob() 将返回文件和目录。 在之前版本中,仅会返回目录。 (由 Barney Gale 在 gh-70303 中贡献。).)
为 Path.is_file, Path.is_dir, Path.owner() 和 Path.group() 增加了 follow_symlinks 仅限关键字参数。 (由 Barney Gale 在 gh-105793 中,以及 Kamil Turek 在 gh-107962 中贡献。)
pdb¶
现在 breakpoint() 和 set_trace() 会立即进入调试器而不是在被执行代码的下一行进入。 这一更改可防止当 breakpoint() 位于上下文末尾 时调试器在上下文以外被中断。 (由 Tian Gao 在 gh-118579 中贡献。)
当设置了 sys.flags.safe_path 时 sys.path[0] 将不会再被替换为被调试脚本的目录。 (由 Tian Gao 和 Christian Walther 在 gh-111762 中贡献。)
现在支持将 zipapp 作为调试目标。 (由 Tian Gao 在 gh-118501 中贡献。)
添加了在 pm() 中进行事后调试期间使用 Pdb 新增的 exceptions [exc_number] 命令在串连的异常之间移动的能力。 (由 Matthias Bussonnier 在 gh-106676 中贡献。)
以一条 pdb 命令打头的表达式和语句现在会被正确地标识并执行。 (由 Tian Gao 在 gh-108464 中贡献。)
queue¶
增加了 Queue.shutdown 和 ShutDown 用于管理队列的终结。 (由 Laurie Opperman 和 Yves Duprat 在 gh-104750 中贡献。)
random¶
增加了一个 命令行接口。 (由 Hugo van Kemenade 在 gh-118131 中贡献。)
re¶
将 re.error 重命名为 PatternError 以改善准确性。 re.error 仍被保留用于向下兼容。
shutil¶
在 chown() 中增加了对 dir_fd 和 follow_symlinks 关键字参数的支持。 (由 Berker Peksag 和 Tahia K 在 gh-62308 中贡献。)
site¶
现在 .pth 文件将先使用 UTF-8 来解码,如果 UTF-8 解码失败再使用 locale encoding。 (由 Inada Naoki 在 gh-117802 中贡献。)
sqlite3¶
现在当一个 Connection 对象未被显式地 关闭 时将发出 ResourceWarning。 (由 Erlend E. Aasland 在 gh-105539 中贡献。)
为 Connection.iterdump() 增加了 filter 仅限关键字形参用于过滤要转储的数据库对象。 (由 Mariusz Felisiak 在 gh-91602 中贡献。)
ssl¶
现在 create_default_context() API 将在其默认旗标中包括 VERIFY_X509_PARTIAL_CHAIN 和 VERIFY_X509_STRICT。
备注
VERIFY_X509_STRICT 可能会拒绝下层 OpenSSL 实现本来会接受的 RFC 5280 以前的证书或格式错误的证书。 虽然不建议禁用此功能,但你可以使用以下方式禁用它:
import ssl
ctx = ssl.create_default_context()
ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
(由 William Woodruff 在 gh-112389 贡献。)
statistics¶
增加了用于核密度估计的 kde()。 这使得根据固定数量的离散样本估计连续概率密度函数成为可能。 (由 Raymond Hettinger 在 gh-115863 中贡献。)
增加了 kde_random() 用来从 kde() 创建的估计概率密度函数进行取样。 (由 Hettinger 在 gh-115863 中贡献。)
subprocess¶
现在 subprocess 模块会在更多场合下使用 posix_spawn() 函数。
需要注意的是,当 close_fds 为 True 时(默认值),则将在 C 库提供了 posix_spawn_file_actions_addclosefrom_np() 时使用 posix_spawn(),这包括近期的 Linux, FreeBSD 和 Solaris 版本。 在 Linux,其性能应当与现有的 Linux vfork() 基础代码类似。
如果你需要强制 subprocess 绝不使用 posix_spawn() 可以将私有的控制节点 subprocess._USE_POSIX_SPAWN 设为 False。 如果你这样设置的话请在 issue tracker 中报告你的理由和平台相关的细节以便我们能够为大家改进 API 的选择逻辑。 (由 Jakub Kulik 在 gh-113117 中贡献。)
sys¶
增加了 _is_interned() 函数用于检测字符串是否被内部化。 此函数不保证在所有的 Python 实现中均存在。 (由 Serhiy Storchaka 在 gh-78573 中贡献。)
tempfile¶
在 Windows 上,tempfile.mkdtemp() 所使用的默认模式 0o700 由于 os.mkdir() 的更改现在将限制对新目录的访问。 这是对 CVE 2024-4030 的缓解措施。 (由 Steve Dower 在 gh-118486 中贡献。)
time¶
在 Windows 上,monotonic() 现在将使用精度为 1 微秒的 QueryPerformanceCounter() 时钟,而不是精度只有 15.6 毫秒的 GetTickCount64() 时钟。 (由 Victor Stinner 在 gh-88494 中贡献。)
在 Windows 上,time() 现在将使用精度为 1 微秒的 GetSystemTimePreciseAsFileTime() 时钟,代替精度为 15.6 毫秒的 GetSystemTimeAsFileTime() 时钟。 (由 Victor Stinner 在 gh-63207 中贡献。)
tkinter¶
增加了 tkinter 控件方法: tk_busy_hold(), tk_busy_configure(), tk_busy_cget(), tk_busy_forget(), tk_busy_current() 和 tk_busy_status()。 (由 Miguel, klappnase 和 Serhiy Storchaka 在 gh-72684 中贡献。)
现在 tkinter 控件 wm_attributes() 接受不带负号前缀的属性名称来获取窗口属性,例如 w.wm_attributes('alpha') 并允许指定属性和值以关键字参数形式来设置,例如 w.wm_attributes(alpha=0.5)。 (由 Serhiy Storchaka 在 gh-43457 中贡献。)
通过使用新的可选关键字形参 return_python_dict,现在 wm_attributes() 可将属性作为 dict 返回。 (由 Serhiy Storchaka 在 gh-43457 中贡献。)
现在当使用新的可选仅限关键字形参 return_ints 时 Text.count() 可以返回一个简单的 int。 在其他情况下,将以 1 个元素的元组形式返回单个计数值或者 None。 (由 Serhiy Storchaka 在 gh-97928 中贡献。)
在 tkinter.ttk.Style 的 element_create() 方法中增加了对 "vsapi" 元素类型的支持。 (由 Serhiy Storchaka 在 gh-68166 中贡献。)
为 Tkinter 的控件增加了 after_info() 方法。 (由 Cheryl Sabella 在 gh-77020 中贡献。)
为 PhotoImage 新增 copy_replace() 方法用于将一个图像的某个区域拷贝到另一个图像,可能带有像素缩放、子采样,或两者皆有。 (由 Serhiy Storchaka 在 gh-118225 中贡献。)
为 PhotoImage 的方法 copy(), zoom() 和 subsample() 增加了 from_coords 形参。 为 PhotoImage 的方法 copy() 增加了 zoom 和 subsample 形参。 (由 Serhiy Storchaka 在 gh-118225 中贡献。)
增加了 PhotoImage 方法 read() 用于从文件读取图像以及 data() 用于获取图像数据。 为 write() 方法增加了 background 和 grayscale 形参。 (由 Serhiy Storchaka 在 gh-118271 中贡献。).)
traceback¶
为 TracebackException 增加了 exc_type_str 属性,它用于保存 exc_type 字符串表示。 弃用了 exc_type 属性,它用于保存类型对象本身。 增加了 save_exc_type 形参 (默认值为 True) 用于指明 exc_type 是否应当被保存。 (由 Irit Katriel 在 gh-112332 中贡献。)
为 TracebackException.format_exception_only() 增加了新的 show_group 仅限关键字形参用于(递归地)格式化 BaseExceptionGroup 实例中嵌套的异常。 (由 Irit Katriel 在 gh-105292 中贡献。)
types¶
现在 SimpleNamespace 可以接受单个位置参数来初始化命名空间的各个参数值。 该参数必须为映射或键值对的可迭代对象。 (由 Serhiy Storchaka 在 gh-108191 中贡献。)
typing¶
PEP 705: 增加 ReadOnly,一个针对类型检查器的特殊类型结构,用于将 TypedDict 的项标记为只读。
PEP 742: 增加 TypeIs,一个可被用于指示类型检查器如何细化类型的类型结构。
增加 NoDefault,一个用于代表 typing 模块中某些形参的默认值的哨兵对象。 (由 Jelle Zijlstra 在 gh-116126 中贡献。)
增加 get_protocol_members() 用于返回定义一个 typing.Protocol 的成员的集合。 (由 Jelle Zijlstra 在 gh-104873 中贡献。)
增加 is_protocol() 用于检查一个类是否属于 Protocol。 (由 Jelle Zijlstra 在 gh-104873 中贡献。)
现在 ClassVar 可以被嵌套在 Final 中,反之亦然。 (由 Mehdi Drissi 在 gh-89547 中贡献。)
unicodedata¶
将 Unicode 数据库更新到 15.1.0 版。 (由 James Gerity 在 gh-109559 中贡献。)
venv¶
增加了对在虚拟环境目录中添加源码控制管理 (SCM) 忽略文件的支持。 在默认情况下,Git 已受到支持。 此特性是以可被扩展为支持其他 SCM 的通过 API 选择启用 (EnvBuilder 和 create()),并通过 CLI 使用 --without-scm-ignore-files 选择禁用的方式实现的。 (由 Brett Cannon 在 gh-108125 中贡献。)
warnings¶
PEP 702: 新的 warnings.deprecated() 装饰器提供了一种将弃用消息传送给 static type checker 并在使用已弃用的类和函数时发出警告的方式。 当被装饰的函数或类在运行时被使用时也可以发出 DeprecationWarning。 (由 Jelle Zijlstra 在 gh-104003 中贡献。)
xml¶
通过添加五个新方法来允许控制 Expat >=2.6.0 重解析延迟 (CVE 2023-52425):
xml.etree.ElementTree.XMLParser.flush()
xml.etree.ElementTree.XMLPullParser.flush()
xml.parsers.expat.xmlparser.GetReparseDeferralEnabled()
xml.parsers.expat.xmlparser.SetReparseDeferralEnabled()
xml.sax.expatreader.ExpatParser.flush()
(由 Sebastian Pipping 在 gh-115623 中贡献。)
为 iterparse() 所返回的迭代器增加了 close() 方法用于执行显式的清理。 (由 Serhiy Storchaka 在 gh-69893 中贡献。)
zipimport¶
增加了对 ZIP64 格式的文件的支持。 大家都喜欢更庞大的数据,对吧? (由 Tim Hatch 在 gh-94146 中贡献。).)