- logging
- lzma
- math
- multiprocessing
- operator
- os
- pathlib
- pickle
- poplib
- re
- readline
- selectors
- shutil
- signal
- smtpd
- smtplib
- sndhdr
- socket
- ssl
- sqlite3
- subprocess
- sys
- sysconfig
- tarfile
- threading
- time
- timeit
- tkinter
- 回溯
- types
- unicodedata
- unittest
- unittest.mock
- urllib
- wsgiref
- xmlrpc
- xml.sax
- zipfile
- 其他模块级更改
- 性能优化
- 构建和 C API 的改变
- 弃用
- 移除
- 移植到Python 3.5
- Python 3.5.4 的显著变化
logging
所有日志记录方法(如 Logger
log()
, exception()
, critical()
, debug()
等)的 exc_info 参数现在除接受布尔值和异常元组以外,也接受异常实例:
- >>> import logging
- >>> try:
- ... 1/0
- ... except ZeroDivisionError as ex:
- ... logging.error('exception', exc_info=ex)
- ERROR:root:exception
(由 Yury Selivanov 在 bpo-20537 [https://bugs.python.org/issue?@action=redirect&bpo=20537] 中贡献。)
现在 handlers.HTTPHandler
类接受一个可选的 ssl.SSLContext
实例来配置在 HTTP 连接中使用的 SSL 设置。 (由 Alex Gaynor 在 bpo-22788 [https://bugs.python.org/issue?@action=redirect&bpo=22788] 中贡献。)
现在 handlers.QueueListener
类接受一个 respect_handler_level 关键字参数,如果将该参数设为 True
,会向处理器传递消息以将处理器级别纳入考量。 (由 Vinay Sajip 贡献。)
lzma
现在 LZMADecompressor.decompress()
方法接受一个可选的 max_length 参数用来限制解压缩数据的大小上限。 (由 Martin Panter 在 bpo-15955 [https://bugs.python.org/issue?@action=redirect&bpo=15955] 中贡献。)
math
向 math
模块增加了两个新常量: inf
和 nan
。 (由 Mark Dickinson 在 bpo-23185 [https://bugs.python.org/issue?@action=redirect&bpo=23185] 中贡献。)
新增函数 isclose()
提供了一种测试近似相等的方式。 (由 Chris Barker 和 Tal Einat 在 bpo-24270 [https://bugs.python.org/issue?@action=redirect&bpo=24270] 中贡献。)
新增 gcd()
函数。 现在 fractions.gcd()
函数已被弃用。 (由 Mark Dickinson 和 Serhiy Storchaka 在 bpo-22486 [https://bugs.python.org/issue?@action=redirect&bpo=22486] 中贡献。)
multiprocessing
现在 sharedctypes.synchronized()
对象支持 context manager 协议。 (由 Charles-François Natali 在 bpo-21565 [https://bugs.python.org/issue?@action=redirect&bpo=21565] 中贡献。)
operator
现在 attrgetter()
, itemgetter()
和 methodcaller()
对象支持封存操作。 (由 Josh Rosenberg 和 Serhiy Storchaka 在 bpo-22955 [https://bugs.python.org/issue?@action=redirect&bpo=22955] 中贡献。)
新增 matmul()
和 imatmul()
函数用于执行矩阵乘法。 (由 Benjamin Peterson 在 bpo-21176 [https://bugs.python.org/issue?@action=redirect&bpo=21176] 中贡献。)
os
新增 scandir()
函数可返回一个 DirEntry
对象的迭代器。 如有可能,scandir()
会在扫描目录时提取文件属性,不必再执行后续的系统调用来确定文件类型或属性,这可以显著提升运行效率。 (由 Ben Hoyt 在 bpo-22524 [https://bugs.python.org/issue?@action=redirect&bpo=22524] 并得到 Victor Stinner 的协助。)
在 Windows 上,现在可使用新的 stat_result.st_file_attributes
属性。 它对应于 GetFileInformationByHandle()
所返回的 BY_HANDLE_FILE_INFORMATION
结构体的 dwFileAttributes
成员。 (由 Ben Hoyt 在 bpo-21719 [https://bugs.python.org/issue?@action=redirect&bpo=21719] 中贡献。)
现在 urandom()
函数在 Linux 3.17 或更新的系统上会使用 getrandom()
系统调用,而在 OpenBSD 5.6 或更新的系统上会使用 getentropy()
,不必再使用 devurandom
并避免由于潜在的文件描述符耗尽导致的执行失败。 (由 Victor Stinner 在 bpo-22181 [https://bugs.python.org/issue?@action=redirect&bpo=22181] 中贡献。)
新增的 get_blocking()
和 set_blocking()
函数允许获取和设置文件描述符的阻塞模式 (O_NONBLOCK
)。 (由 Victor Stinner 在 bpo-22054 [https://bugs.python.org/issue?@action=redirect&bpo=22054] 中贡献。)
现在 truncate()
和 ftruncate()
函数在 Windows 上已受到支持。 (由 Steve Dower 在 bpo-23668 [https://bugs.python.org/issue?@action=redirect&bpo=23668] 中贡献。)
新增的 os.path.commonpath()
函数可返回所传入的每个路径名的最长共同子路径。 与 os.path.commonprefix()
函数不同,该函数总是会返回一个有效的路径:
- >>> os.path.commonprefix(['usrlib', 'usrlocal/lib'])
- 'usrl'
- >>> os.path.commonpath(['usrlib', 'usrlocal/lib'])
- '/usr'
(由 Rafik Draoui 和 Serhiy Storchaka 在 bpo-10395 [https://bugs.python.org/issue?@action=redirect&bpo=10395] 中贡献。)
pathlib
新增的 Path.samefile()
方法可被用来检查一个路径是否与另一个路径指向相同的文件,两个路径可以是 Path
对象,也可以是字符串:
- >>> import pathlib
- >>> p1 = pathlib.Path('etchosts')
- >>> p2 = pathlib.Path('etc..etchosts')
- >>> p1.samefile(p2)
- True
(由 Vajrasky Kok 和 Antoine Pitrou 在 bpo-19775 [https://bugs.python.org/issue?@action=redirect&bpo=19775] 中贡献。)
现在 Path.mkdir()
方法接受一个新的 exist_ok 可选参数以与 mkdir -p
和 os.makedirs()
的功能相匹配。 (由 Berker Peksag 在 bpo-21539 [https://bugs.python.org/issue?@action=redirect&bpo=21539] 中贡献。)
新增了一个 Path.expanduser()
方法用于扩展 ~
和 ~user
前缀。 (由 Serhiy Storchaka 和 Claudiu Popa 在 bpo-19776 [https://bugs.python.org/issue?@action=redirect&bpo=19776] 中贡献。)
新增的 Path.home()
类方法可被用于获取代表用户家目录的 Path
实例。 (由 Victor Salgado 和 Mayank Tripathi 在 bpo-19777 [https://bugs.python.org/issue?@action=redirect&bpo=19777] 中贡献。)
新增 Path.write_text()
, Path.read_text()
, Path.write_bytes()
, Path.read_bytes()
方法用于简化对文件的读/写操作。
以下代码片段将创建或重写现有的文件 ~/spam42
:
- >>> import pathlib
- >>> p = pathlib.Path('~/spam42')
- >>> p.expanduser().write_text('ham')
- 3
(由 Christopher Welborn 在 bpo-20218 [https://bugs.python.org/issue?@action=redirect&bpo=20218] 中贡献。)
pickle
嵌套的对象,例如未绑定方法或嵌套的类,现在可以使用早于协议版本 4 的 pickle 协议。 协议版本 4 在此前已支持此种场景。 (由 Serhiy Storchaka 在 bpo-23611 [https://bugs.python.org/issue?@action=redirect&bpo=23611] 中贡献。)
poplib
新增 POP3.utf8()
命令可以启用 RFC 6856 [https://datatracker.ietf.org/doc/html/rfc6856.html] (国际化 Email) 支持,如果 POP 服务器支持的话。 (由 Milan OberKirch 在 bpo-21804 [https://bugs.python.org/issue?@action=redirect&bpo=21804] 中贡献。)
re
现在对固定长度分组的引用和有条件引用在后视断言中已被允许:
- >>> import re
- >>> pat = re.compile(r'(a|b).(?<=\1)c')
- >>> pat.match('aac')
- <_sre.SRE_Match object; span=(0, 3), match='aac'>
- >>> pat.match('bbc')
- <_sre.SRE_Match object; span=(0, 3), match='bbc'>
(由 Serhiy Storchaka 在 bpo-9179 [https://bugs.python.org/issue?@action=redirect&bpo=9179] 中贡献。)
在正则表达式中捕获分组的数量不再有 100 个的上限。 (由 Serhiy Storchaka 在 bpo-22437 [https://bugs.python.org/issue?@action=redirect&bpo=22437] 中贡献。)
现在 sub()
和 subn()
函数将用空字符串替换不匹配的分组而不是引发异常。 (由 Serhiy Storchaka 在 bpo-1519638 [https://bugs.python.org/issue?@action=redirect&bpo=1519638] 中贡献。)
re.error
异常添加了新的属性 msg
, pattern
, pos
, lineno
和 colno
,以提供更详细的错误上下文信息:
- >>> re.compile("""
- ... (?x)
- ... .++
- ... """)
- Traceback (most recent call last): ...
- sre_constants.error: multiple repeat at position 16 (line 3, column 7)
(由 Serhiy Storchaka 在 bpo-22578 [https://bugs.python.org/issue?@action=redirect&bpo=22578] 中贡献。)
readline
新增的 append_history_file()
函数可被用于将历史数据中指定数量的末尾元素添加到给定的文件中。 (由 Bruno Cauet 在 bpo-22940 [https://bugs.python.org/issue?@action=redirect&bpo=22940] 中贡献。)
selectors
新增的 DevpollSelector
在 Solaris 上支持高效的 devpoll
轮询。 (由 Giampaolo Rodola' 在 bpo-18931 [https://bugs.python.org/issue?@action=redirect&bpo=18931] 中贡献。)
shutil
现在 move()
函数现在接受一个 copy_function 参数,举例来说,如果需要在移动文件时忽略其元数据,可以使用 copy()
函数来代替默认的 copy2()
。 (由 Claudiu Popa 在 bpo-19840 [https://bugs.python.org/issue?@action=redirect&bpo=19840] 中贡献。)
现在 make_archive()
函数已支持 xztar 格式。 (由 Serhiy Storchaka 在 bpo-5411 [https://bugs.python.org/issue?@action=redirect&bpo=5411] 中贡献。)
signal
在 Windows 上,现在 set_wakeup_fd()
函数还可以支持套接字句柄。 (由 Victor Stinner 在 bpo-22018 [https://bugs.python.org/issue?@action=redirect&bpo=22018] 中贡献。)
signal
模块中的各个 SIG*
常量已被转换为 枚举
。 这允许在调试期间打印有意义的名称,而不是整数类型的“魔法数字”。 (由 Giampaolo Rodola' 在 bpo-21076 [https://bugs.python.org/issue?@action=redirect&bpo=21076] 中贡献。)
smtpd
现在 SMTPServer
和 SMTPChannel
类都接受一个 decode_data 关键字参数用来确定 SMTP 事务的 DATA
部分是要使用 "utf-8"
编解码器来解码还是要以字符串的形式提供给 SMTPServer.process_message()
方法。 默认值设为 True
是出于向下兼容的考虑,但将在 Python 3.6 中更改为 False
。 如果 decode_data 被设为 False
,则必须准备好让 process_message
方法接受关键字参数。 (由 Maciej Szulik 在 bpo-19662 [https://bugs.python.org/issue?@action=redirect&bpo=19662] 中贡献。)
如果 decode_data 已被设为 True
则 SMTPServer
类现在会使用 8BITMIME
扩展 ( RFC 6152 [https://datatracker.ietf.org/doc/html/rfc6152.html])。 如果客户端在 MAIL
命令中指定了 BODY=8BITMIME
,则它会通过 mail_options 关键字传递给 SMTPServer.process_message()
。 (由 Milan Oberkirch 和 R. David Murray 在 bpo-21795 [https://bugs.python.org/issue?@action=redirect&bpo=21795] 中贡献。)
现在 SMTPServer
类也支持 SMTPUTF8
扩展 ( RFC 6531 [https://datatracker.ietf.org/doc/html/rfc6531.html]: 国际化 Email)。 如果客户端在 MAIL
命令中指定了 SMTPUTF8 BODY=8BITMIME
,则它们会通过 mail_options 关键字传递给 SMTPServer.process_message()
。 process_message
方法需要负责正确地处理 SMTPUTF8
数据。 (由 Milan Oberkirch 在 bpo-21725 [https://bugs.python.org/issue?@action=redirect&bpo=21725] 中贡献。)
现在可以在 SMTPServer
构造器中,直接或通过名称解析来提供 IPv6 地址,并使其成功连接。 (由 Milan Oberkirch 在 bpo-14758 [https://bugs.python.org/issue?@action=redirect&bpo=14758] 中贡献。)
smtplib
新增的 SMTP.auth()
方法为实现自定义身份验证机制提供了一个便捷的方式。 (由 Milan Oberkirch 在 bpo-15014 [https://bugs.python.org/issue?@action=redirect&bpo=15014] 中贡献。)
现在 SMTP.set_debuglevel()
方法可接受额外的 debuglevel (2),它将在调试消息中启用时间戳。 (由 Gavin Chappell 和 Maciej Szulik 在 bpo-16914 [https://bugs.python.org/issue?@action=redirect&bpo=16914] 中贡献。)
现在 SMTP.sendmail()
和 SMTP.send_message()
方法均支持 RFC 6531 [https://datatracker.ietf.org/doc/html/rfc6531.html] (SMTPUTF8)。 (由 Milan Oberkirch 和 R. David Murray 在 bpo-22027 [https://bugs.python.org/issue?@action=redirect&bpo=22027] 中贡献。)
sndhdr
现在 what()
和 whathdr()
函数将返回 namedtuple()
。 (由 Claudiu Popa 在 bpo-18615 [https://bugs.python.org/issue?@action=redirect&bpo=18615] 中贡献。)
socket
现在函数的超时设置将使用单调时钟,而不是系统时钟。 (由 Victor Stinner 在 bpo-22043 [https://bugs.python.org/issue?@action=redirect&bpo=22043] 中贡献。)
新增的 socket.sendfile()
方法允许在 UNIX 上使用高性能的 os.sendfile()
函数通过套接字发送文件,使得上传速度比使用简单的 socket.send()
快 2 至 3 倍。 (由 Giampaolo Rodola' 在 bpo-17552 [https://bugs.python.org/issue?@action=redirect&bpo=17552] 中贡献。)
socket.sendall()
方法每次接受或发送字节数据时将不再重置套接字超时。 现在套接字超时将为发送所有数据最大总计持续时间。 (由 Victor Stinner 在 bpo-23853 [https://bugs.python.org/issue?@action=redirect&bpo=23853] 中贡献。)
现在 socket.listen()
方法的 backlog 参数将是可选的。 在默认情况下它会被设为 SOMAXCONN
或 128
,取其中的较小值。 (由 Charles-François Natali 在 bpo-21455 [https://bugs.python.org/issue?@action=redirect&bpo=21455] 中贡献。)
ssl
内存 BIO 支持
(由 Geert Jansen 在 bpo-21965 [https://bugs.python.org/issue?@action=redirect&bpo=21965] 中贡献。)
新增了 SSLObject
类以针对 SSLSocket
的网络 I/O 能力是非必要或未优化的情况提供 SSL 协议支持。 SSLObject
代表一个 SSL 协议实例,但不实现任何网络 I/O 方法,而是提供一个内存缓冲区接口。 新增的 MemoryBIO
类可被用于在 Python 和 SSL 协议实例之间传递数据。
内存 BIO SSL 支持主要被用来为对 SSLSocket
的就绪模型("选择/轮询")来说效率较低的框架实现异步 I/O。
新增的 SSLContext.wrap_bio()
方法可被用于创建新的 SSLObject
实例。
应用层协议协商支持
(由 Benjamin Peterson 在 bpo-20188 [https://bugs.python.org/issue?@action=redirect&bpo=20188] 中贡献。)
如果有 OpenSSL 支持,现在 ssl
模块可实现 RFC 7301 [https://datatracker.ietf.org/doc/html/rfc7301.html] 中描述的 应用层协议协商 TLS 扩展。
新增的 SSLContext.set_alpn_protocols()
可被用来指定在 TLS 握手期间套接字所要应用的协议。
新增的 SSLSocket.selected_alpn_protocol()
可返回在 TLS 握手期间所选择的协议。 HAS_ALPN
旗标用于指明是否提供了 ALPN 支持。
其他改变
新增 SSLSocket.version()
方法以便查询实际使用的协议。 (由 Antoine Pitrou 在 bpo-20421 [https://bugs.python.org/issue?@action=redirect&bpo=20421] 中贡献。)
现在 SSLSocket
类已实现了 SSLSocket.sendfile()
方法。 (由 Giampaolo Rodola' 在 bpo-17552 [https://bugs.python.org/issue?@action=redirect&bpo=17552] 中贡献。)
现在当操作将要阻塞时 SSLSocket.send()
方法将在非阻塞的套接字上引发 ssl.SSLWantReadError
或 ssl.SSLWantWriteError
异常。 在之前版本中,它将返回 0
。 (由 Nikolaus Rath 在 bpo-20951 [https://bugs.python.org/issue?@action=redirect&bpo=20951] 中贡献。)
根据 RFC 5280 [https://datatracker.ietf.org/doc/html/rfc5280.html],现在 cert_time_to_seconds()
函数会将输入的时间解读为 UTC 而不是本地时间。 此外,其返回值必定为 int
。 (由 Akira Li 在 bpo-19940 [https://bugs.python.org/issue?@action=redirect&bpo=19940] 中贡献。)
新增的 SSLObject.shared_ciphers()
和 SSLSocket.shared_ciphers()
方法将返回客户端在握手期间中发送的密码列表。 (由 Benjamin Peterson 在 bpo-23186 [https://bugs.python.org/issue?@action=redirect&bpo=23186] 中贡献。)
SSLSocket
类的 SSLSocket.do_handshake()
, SSLSocket.read()
, SSLSocket.shutdown()
和 SSLSocket.write()
方法在每次接收或发送字节数据时将不再重置套接字超时。 现在套接字超时将为方法的最长运行时间。 (由 Victor Stinner 在 bpo-23853 [https://bugs.python.org/issue?@action=redirect&bpo=23853] 中贡献。)
现在 match_hostname()
函数也支持 IP 地址的匹配。 (由 Antoine Pitrou 在 bpo-23239 [https://bugs.python.org/issue?@action=redirect&bpo=23239] 中贡献。)
sqlite3
现在 Row
类可完整支持序列协议,特别是 reversed()
迭代和切片索引。 (由 Claudiu Popa 在 bpo-10203 [https://bugs.python.org/issue?@action=redirect&bpo=10203] 中贡献;由 Lucas Sinclair, Jessica McKellar 和 Serhiy Storchaka 在 bpo-13583 [https://bugs.python.org/issue?@action=redirect&bpo=13583] 中贡献。)
subprocess
新增了 run()
函数。 它可运行指定的命令并返回一个 CompletedProcess
对象,该对象表示已结束的进程。 这个新 API 有更好的一致性并且是在 Python 中唤起子进程的推荐方式,它不需要维持与更早的 Python 的兼容性。 (由 Thomas Kluyver 在 bpo-23342 [https://bugs.python.org/issue?@action=redirect&bpo=23342] 中贡献。)
示例:
- >>> subprocess.run(["ls", "-l"]) # 无法捕获输出
- CompletedProcess(args=['ls', '-l'], returncode=0)
- >>> subprocess.run("exit 1", shell=True, check=True)
- Traceback (most recent call last): ...
- subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
- >>> subprocess.run(["ls", "-l", "devnull"], stdout=subprocess.PIPE)
- CompletedProcess(args=['ls', '-l', 'devnull'], returncode=0,
- stdout=b'crw-rw-rw-1 root root 1, 3 Jan 23 16:23 devnull\n')
sys
新增的 set_coroutine_wrapper()
函数允许设置一个要在 协程对象 被 async def
函数创建时被调用的全局钩子。 可以使用相应的 get_coroutine_wrapper()
来获取当前设置的包装器。 这两个函数均为 暂定状态,并应当仅用于调试目的。 (由 Yury Selivanov 在 bpo-24017 [https://bugs.python.org/issue?@action=redirect&bpo=24017] 中贡献。)
新增的 is_finalizing()
函数可用于检测 Python 解释器是否 正在关闭。 (由 Antoine Pitrou 在 bpo-22696 [https://bugs.python.org/issue?@action=redirect&bpo=22696] 中贡献。)
sysconfig
在 Windows 上用户脚本的名称现在将包括 Python 版本号的前两个数字。 (由 Paul Moore 在 bpo-23437 [https://bugs.python.org/issue?@action=redirect&bpo=23437] 中贡献。)
tarfile
现在 open()
函数的 mode 参数可接受 "x"
来请求独占式的创建。 (由 Berker Peksag 在 bpo-21717 [https://bugs.python.org/issue?@action=redirect&bpo=21717] 中贡献。)
现在 TarFile.extractall()
和 TarFile.extract()
方法可接受关键字参数 numeric_owner。 如果设为 True
,解压的文件和目录将归属于 tar 文件保存的数字 uid
和 gid
。 如果设为 False
(默认值,也是 3.5 之前版本的行为),则它们将归属于 tar 文件保存的用户和组名称。 (由 Michael Vogt 和 Eric Smith 在 bpo-23193 [https://bugs.python.org/issue?@action=redirect&bpo=23193] 中贡献。)
现在 TarFile.list()
接受可选的 members 关键字参数,它可被设为 TarFile.getmembers()
所返回的列表的一个子集。 (由 Serhiy Storchaka 在 bpo-21549 [https://bugs.python.org/issue?@action=redirect&bpo=21549] 中贡献。)
threading
现在 Lock.acquire()
和 RLock.acquire()
方法均使用单调时钟进行超时管理。 (由 Victor Stinner 在 bpo-22043 [https://bugs.python.org/issue?@action=redirect&bpo=22043] 中贡献。)
time
现在 monotonic()
函数将总是可用。 (由 Victor Stinner 在 bpo-22043 [https://bugs.python.org/issue?@action=redirect&bpo=22043] 中贡献。)
timeit
新增的命令行选项 -u
或 --unit=U
可被用于指定计时器输出的时间单位。 受支持的选项有 usec
, msec
或 sec
。 (由 Julian Gindi 在 bpo-18983 [https://bugs.python.org/issue?@action=redirect&bpo=18983] 中贡献。)
timeit()
函数新增了 globals 形参用于指定代码运行所在的命名空间。 (由 Ben Roberts 在 bpo-2527 [https://bugs.python.org/issue?@action=redirect&bpo=2527] 中贡献。).)
tkinter
用于在 Windows 上设置 Tcl/Tk 环境的 tkinter._fix
模块已被 _tkinter
模块中的私有函数所替换,该函数不会永久性修改环境变量。 (由 Zachary Ware 在 bpo-20035 [https://bugs.python.org/issue?@action=redirect&bpo=20035] 中贡献。)
回溯
新增的 walk_stack()
和 walk_tb()
函数可方便地遍历帧和 回溯对象。 (由 Robert Collins 在 bpo-17911 [https://bugs.python.org/issue?@action=redirect&bpo=17911] 中贡献。)
新增轻量级的类: TracebackException
, StackSummary
和 FrameSummary
。 (由 Robert Collins 在 bpo-17911 [https://bugs.python.org/issue?@action=redirect&bpo=17911] 中贡献。)
现在 print_tb()
和 print_stack()
函数均支持 limit 参数使用负值。 (由 Dmitry Kazakov 在 bpo-22619 [https://bugs.python.org/issue?@action=redirect&bpo=22619] 中贡献。).)
types
新增 coroutine()
函数用于将 生成器 和 生成器型
对象转换为 可等待对象。 (由 Yury Selivanov 在 bpo-24017 [https://bugs.python.org/issue?@action=redirect&bpo=24017] 中贡献。)
新增一个名为 CoroutineType
的类型,用于由 async def
函数创建的 coroutine 对象。 (由 Yury Selivanov 在 bpo-24400 [https://bugs.python.org/issue?@action=redirect&bpo=24400] 中贡献。)
unicodedata
现在 unicodedata
模块使用来自 Unicode 8.0.0 [https://unicode.org/versions/Unicode8.0.0/] 的数据。
unittest
现在 TestLoader.loadTestsFromModule()
方法可接受仅限关键字参数 pattern,它将作为传给 load_tests
的第三个参数。 找到的包无论其路径是否匹配 pattern 都会针对 load_tests
进行检查,因为包名不可能与默认模式相匹配。 (由 Robert Collins 和 Barry A. Warsaw 在 bpo-16662 [https://bugs.python.org/issue?@action=redirect&bpo=16662] 中贡献。)
单元测试发现错误现在将会暴露为 TestLoader
的 TestLoader.errors
属性。 (由 Robert Collins 在 bpo-19746 [https://bugs.python.org/issue?@action=redirect&bpo=19746] 中贡献。)
新增的命令行选项 --locals
可显示回溯中的局部变量。 (由 Robert Collins 在 bpo-22936 [https://bugs.python.org/issue?@action=redirect&bpo=22936] 中贡献。)
unittest.mock
Mock
类具有以下改进:
类构造器新增了 unsafe 形参,它可导致模拟对象在名称以
"assert"
打头的属性名上引发AttributeError
。 (由 Kushal Das 在 bpo-21238 [https://bugs.python.org/issue?@action=redirect&bpo=21238] 中贡献。)新增了
Mock.assert_not_called()
方法用于检测模拟对象是否已被调用。 (由 Kushal Das 在 bpo-21262 [https://bugs.python.org/issue?@action=redirect&bpo=21262] 中贡献。)
现在 MagicMock
类已支持 __truediv__()
, __divmod__()
和 __matmul__()
运算符。 (由 Johannes Baiter 在 bpo-20968 [https://bugs.python.org/issue?@action=redirect&bpo=20968] 中贡献,并由 Håkan Lövdahl 在 bpo-23581 [https://bugs.python.org/issue?@action=redirect&bpo=23581] 和 bpo-23568 [https://bugs.python.org/issue?@action=redirect&bpo=23568] 中贡献。)
在对内置名称打补丁时不再需要显式地将 create=True
传给 patch()
函数。 (由 Kushal Das 在 bpo-17660 [https://bugs.python.org/issue?@action=redirect&bpo=17660] 中贡献。)
urllib
新增的 request.HTTPPasswordMgrWithPriorAuth
类允许对 HTTP 基本认证凭据进行管理以消除不必要的 401
响应处理,或在第一次请求时无条件地发送凭据,以便与返回 404
响应的服务器通信而不是在未发送 Authorization
头信息的情况下发送 401
。 (由 Matej Cepl 在 bpo-19494 [https://bugs.python.org/issue?@action=redirect&bpo=19494] 以及 Akshit Khurana 在 bpo-7159 [https://bugs.python.org/issue?@action=redirect&bpo=7159] 中贡献。)
为 parse.urlencode()
函数新增的 quote_via 参数提供了一种在需要时控制查询部分的编码格式的手段。 (由 Samwyse 和 Arnon Yaari 在 bpo-13866 [https://bugs.python.org/issue?@action=redirect&bpo=13866] 中贡献。)
request.urlopen()
函数接受 ssl.SSLContext
对象作为 context 参数,它将被用于 HTTPS 连接。 (由 Alex Gaynor 在 bpo-22366 [https://bugs.python.org/issue?@action=redirect&bpo=22366] 中贡献。).)
parse.urljoin()
已获得更新已使用 RFC 3986 [https://datatracker.ietf.org/doc/html/rfc3986.html] 语义来解析相对 URL,而不是 RFC 1808 [https://datatracker.ietf.org/doc/html/rfc1808.html] 和 RFC 2396 [https://datatracker.ietf.org/doc/html/rfc2396.html]。 (由 Demian Brecht 和 Senthil Kumaran 在 bpo-22118 [https://bugs.python.org/issue?@action=redirect&bpo=22118] 中贡献。)
wsgiref
现在 headers.Headers
类构造器的 headers 参数将是可选的。 (由 Pablo Torres Navarrete 和 SilentGhost 在 bpo-5800 [https://bugs.python.org/issue?@action=redirect&bpo=5800] 中贡献。)
xmlrpc
现在 client.ServerProxy
类已支持 context manager 协议。 (由 Claudiu Popa 在 bpo-20627 [https://bugs.python.org/issue?@action=redirect&bpo=20627] 中贡献。)
现在 client.ServerProxy
构造器接受可选的 ssl.SSLContext
实例。 (由 Alex Gaynor 在 bpo-22960 [https://bugs.python.org/issue?@action=redirect&bpo=22960] 中贡献。)
xml.sax
现在 SAX 解析器已支持 xmlreader.InputSource
对象的字符流。 (由 Serhiy Storchaka 在 bpo-2175 [https://bugs.python.org/issue?@action=redirect&bpo=2175] 中贡献。)
现在 parseString()
接受 str
实例。 (由 Serhiy Storchaka 在 bpo-10590 [https://bugs.python.org/issue?@action=redirect&bpo=10590] 中贡献。)
zipfile
现在可以将 ZIP 输出写入到不可定位的流。 (由 Serhiy Storchaka 在 bpo-23252 [https://bugs.python.org/issue?@action=redirect&bpo=23252] 中贡献。)
现在 ZipFile.open()
方法的 mode 参数可接受 "x"
来请求独占式的创建。 (由 Serhiy Storchaka 在 bpo-21717 [https://bugs.python.org/issue?@action=redirect&bpo=21717] 中贡献。)
其他模块级更改
现在 mmap
, ossaudiodev
, socket
, ssl
和 codecs
模块中的许多函数都接受可写的 字节型对象。 (由 Serhiy Storchaka 在 bpo-23001 [https://bugs.python.org/issue?@action=redirect&bpo=23001] 中贡献。)
性能优化
os.walk()
函数在 POSIX 系统上可提速 3 至 5 倍,而在 Windows 上可提速 7 至 20 倍。 这是因为使用了新的 os.scandir()
函数,它可以暴露来自下层 readdir
或 FindFirstFile
/FindNextFile
系统调用的文件信息。 (由 Ben Hoyt 在 bpo-23605 [https://bugs.python.org/issue?@action=redirect&bpo=23605] 中贡献并得到 Victor Stinner 的协助。)
对于大对象 bytes(int)
(以零字节填充) 的构建速度更快且使用更少内存。 将使用 calloc()
而不是 malloc()
为这些对象分配内存。 (由 Victor Stinner 在 bpo-21233 [https://bugs.python.org/issue?@action=redirect&bpo=21233] 中贡献。)
ipaddress
中的 IPv4Network
和 IPv6Network
等操作获得了大幅度的加速,比如 subnets()
, supernet()
, summarize_address_range()
, collapse_addresses()
。 加速幅度从 3 到 15 倍不等。 (由 Antoine Pitrou, Michel Albert 和 Markus 在 bpo-21486 [https://bugs.python.org/issue?@action=redirect&bpo=21486], bpo-21487 [https://bugs.python.org/issue?@action=redirect&bpo=21487], bpo-20826 [https://bugs.python.org/issue?@action=redirect&bpo=20826], bpo-23266 [https://bugs.python.org/issue?@action=redirect&bpo=23266] 中贡献。)
ipaddress
对象的封存操作获得了优化以产生显著减小的输出。 (由 Serhiy Storchaka 在 bpo-23133 [https://bugs.python.org/issue?@action=redirect&bpo=23133] 中贡献。)
现在 io.BytesIO
上的许多操作可提速 50% 至 100%。 (由 Serhiy Storchaka 在 bpo-15381 [https://bugs.python.org/issue?@action=redirect&bpo=15381] 以及 David Wilson 在 bpo-22003 [https://bugs.python.org/issue?@action=redirect&bpo=22003] 中贡献。)
现在 marshal.dumps()
函数速度可提升:对于典型数据来说版本 3 和 4 为 65—85%,版本 0 至 2 为 20—25%,最佳场景下最多可达 5 倍。 (由 Serhiy Storchaka 在 bpo-20416 [https://bugs.python.org/issue?@action=redirect&bpo=20416] 和 bpo-23344 [https://bugs.python.org/issue?@action=redirect&bpo=23344] 中贡献。)
现在 UTF-32 编码器可提速 3 至 7 倍。 (由 Serhiy Storchaka 在 bpo-15027 [https://bugs.python.org/issue?@action=redirect&bpo=15027] 中贡献。)
现在正则表达式的解析可提速至多 10%。 (由 Serhiy Storchaka 在 bpo-19380 [https://bugs.python.org/issue?@action=redirect&bpo=19380] 中贡献。).)
json.dumps()
函数已获优化使得设置 ensure_ascii=False
时与设置 ensure_ascii=True
时运行得一样快。 (由 Naoki Inada 在 bpo-23206 [https://bugs.python.org/issue?@action=redirect&bpo=23206] 中贡献。)
PyObject_IsInstance()
和 PyObject_IsSubclass()
函数在第二个参数以 type
作为其元类的常见情况下已获得加速。 (由 Georg Brandl 在 bpo-22540 [https://bugs.python.org/issue?@action=redirect&bpo=22540] 中贡献。)
方法缓存操作已获少量改进,在某些基准测试中可产生至多 5% 的性能提升。 (由 Antoine Pitrou 在 bpo-22847 [https://bugs.python.org/issue?@action=redirect&bpo=22847] 中贡献。)
现在来自 random
模块的对象在 64 位编译版上使用的内存将减少 50%。 (由 Serhiy Storchaka 在 bpo-23488 [https://bugs.python.org/issue?@action=redirect&bpo=23488] 中贡献。)
property()
getter 调用可提速 25%。 (由 Joe Jevnik 在 bpo-23910 [https://bugs.python.org/issue?@action=redirect&bpo=23910] 中贡献。)
现在 fractions.Fraction
的实例化可提速至多 30%。 (由 Stefan Behnel 在 bpo-22464 [https://bugs.python.org/issue?@action=redirect&bpo=22464] 中贡献。)
现在字符串方法 find()
, rfind()
, split()
, partition()
和 in
字符串运算符在搜索 1 个字符的子字符串时将显著提速。 (由 Serhiy Storchaka 在 bpo-23573 [https://bugs.python.org/issue?@action=redirect&bpo=23573] 中贡献。)
构建和 C API 的改变
增加了 calloc
函数
(Victor Stinner 贡献于 bpo-21233 [https://bugs.python.org/issue?@action=redirect&bpo=21233].)
新的 encoding/decoding 帮助函数:
Py_DecodeLocale()
(替代Pychar2wchar()
),Py_EncodeLocale()
(替代Pywchar2char()
).
(由 Victor Stinner 在 bpo-18395 [https://bugs.python.org/issue?@action=redirect&bpo=18395] 中贡献。)
新增的 PyCodec_NameReplaceErrors()
函数可以将 unicode 编码错误替换为 \N{…}
转义符号。 (由 Serhiy Storchaka 在 bpo-19676 [https://bugs.python.org/issue?@action=redirect&bpo=19676] 中贡献。)
新增的 PyErr_FormatV()
函数类似于 PyErr_Format()
,但还接受一个 va_list
参数。 (由 Antoine Pitrou 在 bpo-18711 [https://bugs.python.org/issue?@action=redirect&bpo=18711] 中贡献。)
新增 PyExc_RecursionError
异常。 (由 Georg Brandl 在 bpo-19235 [https://bugs.python.org/issue?@action=redirect&bpo=19235] 中贡献。)
新增 PyModule_FromDefAndSpec()
, PyModule_FromDefAndSpec2()
和 PyModule_ExecDef()
函数,来自 PEP 489 [https://peps.python.org/pep-0489/] — 多阶段扩展模块初始化。 (由 Petr Viktorin 在 bpo-24268 [https://bugs.python.org/issue?@action=redirect&bpo=24268] 中贡献。)
新增 PyNumber_MatrixMultiply()
和 PyNumber_InPlaceMatrixMultiply()
函数用于执行矩阵乘法。 (由 Benjamin Peterson 在 bpo-21176 [https://bugs.python.org/issue?@action=redirect&bpo=21176] 中贡献。 另请参阅 PEP 465 [https://peps.python.org/pep-0465/] 了解详情。)
现在 PyTypeObject.tp_finalize
槽位已成为稳定 ABI 的一部分。
Windows 构建现在需要 Microsoft Visual C++ 14.0,它是 Visual Studio 2015 [https://visualstudio.microsoft.com/en/vs/older-downloads/#visualstudio-2015-and-other-products] 的一部分。
现在扩展模块在某些平台上的文件名将包括平台信息标签(该标签是可选的,即使没有它 CPython 也会导入扩展,但是如果存在不匹配的标签,扩展将不会被加载):
在 Linux 上,扩展模块文件名将以
.cpython-
结束:m- - .pyd
为 Python 主版本号;对于 Python 3.5 即为3
。
为 Python 次版本号;对于 Python 3.5 即为5
。
为扩展模块构建在运行时所使用的硬件架构。 最常见的值是i386
表示 32 位 Intel 平台或x86_64
表示 64 位 Intel (和 AMD) 平台。
将始终为linux-gnu
,除非扩展构建是针对 64 位平台上的 32 位 ABI,在此情况下它将为linux-gnu32
(而
将为x86_64
)。
在 Windows 上,扩展模块文件名将以
结束:.cp - .pyd
为 Python 主版本号;对于 Python 3.5 即为3
。
为 Python 次版本号;对于 Python 3.5 即为5
。
是扩展模块构建所针对的平台,可以为win32
表示 Win32,win_amd64
表示 Win64,win_ia64
表示 Windows Itanium 64,win_arm
表示 ARM 版 Windows。如果以调试模式构建,则
将为_d
,在其他情况下将为空白。
在 OS X 平台上,扩展模块文件名现在将以
-darwin.so
结束。在所有其他平台上,扩展模块文件名与 Python 3.4 时一样。
弃用
新关键字
不建议将 async
和 await
用作变量、类、函数或模块的名称。 它们根据 PEP 492 [https://peps.python.org/pep-0492/] 在 Python 3.5 中被引入,并将在 Python 3.7 成为保留关键字。
已弃用的 Python 行为
在生成器内部引发 StopIteration
异常现在将静默生成一个 PendingDeprecationWarning
,这将在 Python 3.6 中改为非静默的弃用警告并在 Python 3.7 中触发 RuntimeError
。 请参阅 PEP 479: 修改生成器内部的 StopIteration 处理方式 了解详情。
不支持的操作系统
Windows XP 已不再被 Microsoft 所支持,因此根据 PEP 11 [https://peps.python.org/pep-0011/],CPython 3.5 不再对该操作系统提供官方支持。
已弃用的 Python 模块、函数和方法
现在 formatter
模块状态已转为完全弃用并仍计划在 Python 3.6 中移除。
asyncio.async()
函数已被弃用并由 of ensure_future()
取代。
在过去 smtpd
模块总是会使用 utf-8
编解码器来解码电子邮件消息的 DATA 部分。 现在这可以通过传给 SMTPServer
的新关键字 decode_data 来控制。 默认值为 True
,但该默认值已被弃用。 请将 decode_data 关键字指定为适当的值以避免弃用警告。
直接向 http.cookies.Morsel
对象的 key
, value
和 coded_value
赋值操作已弃用。 请改用 set()
。 此外,set()
未写入文档的 LegalChars 形参也已弃用,现在将会被忽略。
将格式字符串作为关键字参数 format_string 传给 string.Formatter
类的 format()
方法的操作已被弃用。 (由 Serhiy Storchaka 在 bpo-23671 [https://bugs.python.org/issue?@action=redirect&bpo=23671] 贡献。)
现在 platform.dist()
和 platform.linux_distribution()
函数已被弃用。 各种 Linux 发行版使用太多不同的方式来描述自己,所以此功能将留给具体的包来实现。 (由 Vajrasky Kok 和 Berker Peksag 在 bpo-1322 [https://bugs.python.org/issue?@action=redirect&bpo=1322] 中贡献。)
之前未写入文档的 inspect.Signature
的 from_function
和 from_builtin
方法已被弃用。 请改用新的 Signature.from_callable()
方法。 (由 Yury Selivanov 在 bpo-24248 [https://bugs.python.org/issue?@action=redirect&bpo=24248] 中贡献。)
inspect.getargspec()
函数已被弃用并计划在 Python 3.6 中移除。 (请参阅 bpo-20438 [https://bugs.python.org/issue?@action=redirect&bpo=20438] 了解详情。)
inspect
的 getfullargspec()
, getcallargs()
和 formatargspec()
函数已被弃用而应改用 inspect.signature()
API。 (由 Yury Selivanov 在 bpo-20438 [https://bugs.python.org/issue?@action=redirect&bpo=20438] 中贡献。)
在 Python 3.5.0 发布时 getargvalues()
和 formatargvalues()
函数被误标记为已弃用。
在 str 模式中使用 re.LOCALE
旗标或 re.ASCII
的做法现在已被弃用。 (由 Serhiy Storchaka 在 bpo-22407 [https://bugs.python.org/issue?@action=redirect&bpo=22407] 中贡献。)
在正则表达式模式和替换模式中使用不可识别的由 '\'
加一个 ASCII 字母组成的序列的做法现在会引发弃用警告并将在 Python 3.6 中被禁止。 (由 Serhiy Storchaka 在 bpo-23622 [https://bugs.python.org/issue?@action=redirect&bpo=23622] 中贡献。)
现在 unittest.TestLoader.loadTestsFromModule()
方法未写入文档的非官方 use_load_tests 默认参数已被弃用并会被忽略。 (由 Robert Collins 和 Barry A. Warsaw 在 bpo-16662 [https://bugs.python.org/issue?@action=redirect&bpo=16662] 中贡献。)
移除
API 与特性的移除
以下过时并在之前版本中弃用的 API 和特性现已被移除:
__version__
属性已从 mail 包中被去除。 email 包的代码已经很久没有与 stdlib 分开发布了,而__version__
字符串在最近几次发布版中也没有被更新。在
ftplib
模块中的内部Netrc
类在 3.4 中被弃用,现在已被移除。 (由 Matt Chaput 在 bpo-6623 [https://bugs.python.org/issue?@action=redirect&bpo=6623] 中贡献。).pyo
文件的概念已被移除。暂定的
asyncio
模块中的 JoinableQueue 类在 3.4.4 中被弃用,现在已被移除。 (由 A. Jesse Jiryu Davis 在 bpo-23464 [https://bugs.python.org/issue?@action=redirect&bpo=23464] 中贡献。)
移植到Python 3.5
本节列出了先前描述的更改以及可能需要更改代码的其他错误修正.
Python 行为的改变
- 由于一个疏忽,之前的 Python 版本会错误地接受以下语法:
- f(1 for x in [1], *args)
- f(1 for x in [1], **kwargs)
对于生成器表达式不是传给函数的唯一参数时必须放在圆括号内的情况,Python 3.5 现在会正确地引发 SyntaxError
。
Python API 的变化
PEP 475 [https://peps.python.org/pep-0475/]: 现在当系统调用被信号中断时如果 Python 信号处理器没有引发异常则会执行重试而不是引发
InterruptedError
。在 Python 3.5 之前,如果一个
datetime.time
对象是表示 UTC 时间的午夜则会被视为假值。 此行为被认为容易造成困惑和错误因而在 Python 3.5 中已被去除。 详情参见 bpo-13936 [https://bugs.python.org/issue?@action=redirect&bpo=13936]。现在当操作将要阻塞时
ssl.SSLSocket.send()
方法将在非阻塞的套接字上引发ssl.SSLWantReadError
或ssl.SSLWantWriteError
。 在之前版本中,它将返回0
。 (由 Nikolaus Rath 在 bpo-20951 [https://bugs.python.org/issue?@action=redirect&bpo=20951] 中贡献。)现在生成器的
__name__
属性是根据函数名设置的,而不是根据代码名设置的。 请使用gen.gi_code.co_name
来获取代码名。 生成器还有一个新的__qualname__
属性,即限定名称,它现在用于生成器的表示形式 (repr(gen)
)。 (由 Victor Stinner 在 bpo-21205 [https://bugs.python.org/issue?@action=redirect&bpo=21205] 中贡献。)已弃用的 "strict" 模式和
HTMLParser
,HTMLParser.error()
和HTMLParserError
异常参数已被移除。 (由 Ezio Melotti 在 bpo-15114 [https://bugs.python.org/issue?@action=redirect&bpo=15114] 中贡献。) 现在HTMLParser
的 convert_charrefs 参数默认为True
。 (由 Berker Peksag 在 bpo-21047 [https://bugs.python.org/issue?@action=redirect&bpo=21047] 中贡献。)虽然不是 API 的正式组成部分,但对于移植目的(例如:修复测试)来说需要注意之前 "'sometype' does not support the buffer protocol" 形式的错误消息现在将为 "a bytes-like object is required, not 'sometype'" 形式。 (由 Ezio Melotti 在 bpo-16518 [https://bugs.python.org/issue?@action=redirect&bpo=16518] 中贡献。)
在当前目录被设为已不存在的目录时将不再引发
FileNotFoundError
而是改为find_spec()
返回None
并且 不在sys.path_importer_cache
中缓存None
,这与典型的场景存在区别 (bpo-22834 [https://bugs.python.org/issue?@action=redirect&bpo=22834])。http.client
和http.server
中的 HTTP 状态码和消息被重构为一个通用的HTTPStatus
枚举。http.client
和http.server
中的值仍可被用于向下兼容性。 (由 Demian Brecht 在 bpo-21793 [https://bugs.python.org/issue?@action=redirect&bpo=21793] 中贡献。)现在当一个导入加载器定义了
importlib.machinery.Loader.exec_module()
时它也应该定义create_module()
(现在会引发DeprecationWarning
,在 Python 3.6 中将引发错误)。 如果加载器是继承自importlib.abc.Loader
那么就不需要做什么,在其他情况下只须定义create_module()
来返回None
。 (由 Brett Cannon 在 bpo-23014 [https://bugs.python.org/issue?@action=redirect&bpo=23014] 中贡献。)re.split()
函数总是会忽略空的模式匹配,因此"x*"
模式的效果与"x+"
相同,而"\b"
模式则没有效果。 现在当模式将匹配空字符串时re.split()
会引发一个警告。 为保持兼容性,请使用绝不会匹配空字符串的模式 (例如使用"x+"
而不是"x*"
)。 只匹配空字符串的模式 (例如"\b"
) 现在会引发一个错误。 (由 Serhiy Storchaka 在 bpo-22818 [https://bugs.python.org/issue?@action=redirect&bpo=22818] 中贡献。)http.cookies.Morsel
字典型接口已更为自洽:morsel 比较现在会将key
和value
都纳入考虑,copy()
现在将得到一个Morsel
实例而不是dict
,而update()
现在当更新字典中的任一个键无效时将引发一个异常。 此外,set()
中未写入文档的 LegalChars 形参已被弃用并且现在会被忽略。 (由 Demian Brecht 在 bpo-2211 [https://bugs.python.org/issue?@action=redirect&bpo=2211] 中贡献。)PEP 488 [https://peps.python.org/pep-0488/] 从 Python 中移除了
.pyo
文件并在.pyc
文件名中引入可选的opt-
标签。importlib.util.cache_from_source()
增加了 optimization 形参以协助控制opt-
标签。 为此,该函数的 debug_override 形参现在已被弃用。.pyo
文件也已不再可以作为传给 Python 解释器的文件参数并且在单独分发(即不带源码的代码分发)时将不起作用。 由于在 Python 3.5 中字节码的魔术数字已被改变,即使在不考虑此 PEP 的情况下所有之前版本的 Python 的旧.pyo
文件都已不可用。现在
socket
模块会在 linux 3.6 或更高版本上导出CAN_RAW_FD_FRAMES
常量。根据 RFC 5280 [https://datatracker.ietf.org/doc/html/rfc5280.html],现在
ssl.cert_time_to_seconds()
函数会将输入的时间解读为 UTC 而不是本地时间。 此外,其返回值必须为int
。 (由 Akira Li 在 bpo-19940 [https://bugs.python.org/issue?@action=redirect&bpo=19940] 中贡献。)现在
pygettext.py
工具将为 POT-Creation-Date 标头中的时区使用标准的 +NNNN 格式。现在
smtplib
模块对于调试输出将使用sys.stderr
而不是之前的模块级stderr
变量。 如果你的(测试)程序依赖于对模块级变量打补丁来捕获调试输出,你将需要更新代码将其改为捕获 sys.stderr。当发现空字符串且索引完全超出范围时
str.startswith()
和str.endswith()
方法将不再返回True
。 (由 Serhiy Storchaka 在 bpo-24284 [https://bugs.python.org/issue?@action=redirect&bpo=24284] 中贡献。)现在
inspect.getdoc()
将返回从基类继承的文档字符串。 如果继承的文档字符串可用就不需要再复制文档字符串。 要屏蔽继承的字符串,必须指定一个空字符串(否则将会填充文档)。 此项改变将影响pydoc
模块和help()
函数的输出。 (由 Serhiy Storchaka 在 bpo-15582 [https://bugs.python.org/issue?@action=redirect&bpo=15582] 中贡献。)嵌套的
functools.partial()
调用现在已被展平。 如果你需要之前的行为,现在你可以为functools.partial()
对象添加一个属性或者创建一个functools.partial()
的子类。 (由 Alexander Belopolsky 在 bpo-7830 [https://bugs.python.org/issue?@action=redirect&bpo=7830] 中贡献。)
C API 的变化
(非公开)
PyMemoryViewObject
结构体中未写入文档的format
成员已被移除。 所有依赖于memoryobject.h
中相关部分的扩展都必须重新编译。The
PyMemAllocator
structure was renamed toPyMemAllocatorEx
and a newcalloc
field was added.移除了会泄漏引用的未写入文档的宏
PyObject_REPR()
。请在PyUnicode_FromFormat()
之类的函数中使用格式符%R
来格式化对象的repr()
。 (由 Serhiy Storchaka 在 bpo-22453 [https://bugs.python.org/issue?@action=redirect&bpo=22453] 中贡献。)由于缺少
__module__
属性会破坏封存和内省特性,现在对于没有__module__
属性的内置类型会引发弃用警告。 这在未来将改为AttributeError
。 (由 Serhiy Storchaka 在 bpo-20204 [https://bugs.python.org/issue?@action=redirect&bpo=20204] 中贡献。)作为 PEP 492 [https://peps.python.org/pep-0492/] 实现的一部分,
PyTypeObject
的tp_reserved
槽位被替换为tp_as_async
槽位。 请参看 协程对象 了解相关的新类型、结构体和函数。
Python 3.5.4 的显著变化
新增 make regen-all
构建目标
为了简化交叉编译,并确保 CPython 能够可靠地编译而不需要已存在可用的 Python 版本,基于 autotools 的构建系统将不再尝试根据文件修改时间隐式地重新编译已生成的文件。
取而代之的是,新增了一个 make regen-all
命令以便在需要时强制重新生成这些文件(例如在基于预生成版本构建了 Python 的初始版本之后)。
还定义了其他一些更具选择性的重生成目标 —— 详情参见 Makefile.pre.in [https://github.com/python/cpython/tree/3.13/Makefile.pre.in]。
(由 Victor Stinner 在 bpo-23404 [https://bugs.python.org/issue?@action=redirect&bpo=23404] 中贡献。)
Added in version 3.5.4.
移除了 make touch
构建目标
之前用于通过更新生成文件的修改时间来请求隐式的重新生成这些文件的 make touch
构建目标已被移除。
它已被新的 make regen-all
目标所替代。
(由 Victor Stinner 在 bpo-23404 [https://bugs.python.org/issue?@action=redirect&bpo=23404] 中贡献。)
在 3.5.4 版本发生变更.