注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请开启 JavaScript 以获得完整体验。

Python 3.0 的新特性

(编辑:请查阅 NEWS.help 获取有关使用 ReST 编辑 NEWS 的信息。)

Python 3.0 最终版的新特性

发布日期:2008 年 12 月 03 日

核心和内置组件

  • 问题 #3996:在 Windows 上,PyOS_CheckStack 函数会使解释器中止(“Fatal Python error: Could not reset the stack!”),而不是抛出 MemoryError。
  • 问题 #3689:列表反向迭代器现在支持 __length_hint__ 而不是 __len__。行为现在与其他反向迭代器匹配。
  • 问题 #4367:当无法导入 unicodedata 模块并且存在 N 个转义时,Python 在编译期间会发生段错误。
  • 修复使用 -D_FORTIFY_SOURCE=2 构建 _cursesmodule.c 时的构建失败。

  • 问题 #4387:binascii 现在拒绝接受 str 作为二进制输入。
  • 问题 #4073:向 build_scripts 添加 2to3 支持,重构 build_py 中的该支持。
  • 当启用内部调试时,IDLE 会打印“Unhandled server exception!”消息。
  • 问题 #4455:当两个窗口具有相同的标题时,IDLE 无法显示窗口列表。
  • 问题 #3741:设置 DISTUTILS_USE_SDK 会导致 msvc9compiler.py 引发异常。
  • 问题 #4433:修复垃圾回收 _ctypes.COMError 实例时的访问冲突。
  • 问题 #4429:修复 ctypes 中的 UnicodeDecodeError。
  • 问题 #4373:更正了 pickle 模块中潜在的引用泄漏,并消除了 distutils.tests.test_build_ext 中的误报引用泄漏。
  • 问题 #4382:dbm.dumb 没有为打开的文件指定预期的文件编码。
  • 问题 #4383:当 IDLE 无法连接到其子进程时,它将无法正确显示错误消息。

构建

  • 问题 #4407:修复导致 Windows 安装程序中的 compileall 步骤失败的源文件。

文档

  • 问题 #4449:修复了 multiprocessing 示例
  • 问题 #3799:文档指出 dbm.gnu 和 dbm.ndbm 将接受字符串参数作为键和值,这些参数在提交之前将转换为字节。

Python 3.0 发布候选版本 3 的新特性

发布日期:2008 年 11 月 20 日

核心和内置组件

  • 问题 #4349:由于 Makefile 存在错误,sys.path 中包含一个不存在的平台目录。
  • 问题 #3327:不要在 modules_by_index 列表中过度分配内存。
  • 问题 #1721812:二进制集合操作和 copy() 返回输入类型而不是适当的基础类型。这是不正确的,因为将创建集合子类而不会调用其 __init__() 方法。更正后的行为使集合与列表和字典保持一致。
  • 问题 #4296:修复 PyObject_RichCompareBool,以便 "x in [x]" 的求值结果为 True,即使 x 与自身不相等。这是从 2.6 版本回归的问题。
  • 问题 #3705:当终端不使用 UTF8 时,命令行参数无法正确解码。

  • 问题 #4363:即使不存在 ctypes 模块,uuid.uuid1() 和 uuid.uuid4() 函数现在也能正常工作。
  • FileIO 的 mode 属性现在始终包含"b".
  • 问题 #3799:修复 dbm.dumb 以接受字符串以及字节作为键。现在,字符串键以 UTF-8 写入。
  • 问题 #4338:修复 distutils 上传命令。
  • 问题 #4354:修复 distutils 注册命令。
  • 问题 #4116:解决 ScrolledCanvas.__init__ 中的成员名称冲突。
  • 问题 #4307:现在由inspect.getfullargspec()返回的命名元组使用kwonlydefaults而不是kwdefaults.
  • 问题 #4298:修复当 pickle.loads 传递格式错误的输入时发生的段错误。
  • 问题 #4283:修复 distutils 中剩余的 "iteritems" 调用。

构建

  • 问题 #4389:将图标添加到“添加和删除程序”中的卸载条目。
  • 问题 #4289:从 AdvancedDlg 中删除“取消”按钮。
  • 问题 #1656675:在 Windows 上注册 .py* 文件的拖放处理程序。

工具/演示

  • socketserver 模块的演示现在可以在 Python 3 上正常运行。

Python 3.0 发布候选版本 2 的新特性

发布日期:2008 年 11 月 5 日

核心和内置组件

  • 问题 #4211:根据 PEP 302 的要求,冻结包的 __path__ 属性现在是一个列表而不是字符串。
  • 问题 #3727:修复了 poplib。
  • 问题 #3714:通过在适当的地方使用字节修复了 nntplib。
  • 问题 #1210:修复了 imaplib 及其文档。
  • 问题 #4233:更改了_fileio.FileIOclose()方法在 closefd=False 的文件对象上的语义。文件描述符仍保持打开状态,但文件对象的行为类似于已关闭的文件。此外,FileIO对象还获得了一个新的只读属性closefd.
  • 问题 #3626:在 cygwin 上,如果文件名仅包含 1 个字符,则使用不存在的脚本名称启动 python 不会显示任何内容。
  • 问题 #4176:修复了在序列化对象的__reduce__方法未为第 4 个和第 5 个项返回迭代器时发生的崩溃。
  • 问题 #3723:修复了子解释器的初始化。
  • 问题 #4213:现在,文件系统编码由编解码器子系统规范化,例如,UTF-8 将转换为 utf-8。
  • 问题 #4200:更改了 atexit 模块,以将其状态存储在其 PyModuleDef atexitmodule 中。这修复了多个子解释器中的错误。
  • 问题 #4237:io.FileIO() 引发了由 PyFileIOObject 结构成员初始化不足引起的无效警告。
  • 问题 #4170:序列化 collections.defaultdict 对象会导致解释器崩溃。
  • 问题 #4146:已恢复在 OpenBSD 上的编译。
  • 问题 #3574:compile() 错误地处理了编码为 Latin-1 的源代码。
  • 问题 #2384 和 #3975:当源文件包含coding头时,回溯未正确打印:显示的行错误,并且未遵守编码。
  • 问题 #3740:将模块状态初始化为 Null。
  • 问题 #3946:PyObject_CheckReadBuffer 在 memoryview 对象上崩溃。
  • 问题 #1688:在 Windows 上,如果 input() 提示符包含非 ASCII 字符,则无法正确显示。
  • 错误 #3951:默认情况下不应启用 Py_USING_MEMORY_DEBUGGER。

  • 问题 #3664:如果 Pickler 的子类未能调用基类 __init__ 方法,则 pickle 模块可能会发生段错误。
  • 问题 #3725:telnetlib 现在完全以字节为单位工作。
  • 问题 #4072:恢复 build_py_2to3。
  • 问题 #4014:除了声明 Python 是成熟的之外,不要声称 Python 具有 Alpha 发布状态。
  • 问题 #3187:添加 sys.setfilesystemencoding。
  • 问题 #3187:更好地支持“不可解码”的文件名。代码由 Victor Stinner 编写,GvR 进行了少量调整。
  • 问题 #3965:通过使其成为真正的单例对象,允许重复调用 turtle.Screen。
  • 问题 #3911:ftplib.FTP.makeport() 可能会提供无效的端口号。
  • 问题 #3929:当无法打开数据库时,dbm.open() 将错误地引发 TypeError: "'tuple' object is not callable" 而不是预期的 dbm.error。
  • 错误 #3884:使 turtle 模块再次成为顶级模块。
  • 问题 #3547:修复了 ctypes 结构的不同整数大小的位字段。

扩展模块

  • 问题 #3659:str 的子类不能用作 SQL 参数。

构建

  • 问题 #4120:在 VS2008 中从扩展模块中排除清单。
  • 问题 #4091:再次在 system32 中安装 pythonxy.dll。
  • 问题 #4018:在 Vista 上禁用“为我”安装。
  • 问题 #4204:修复了 FreeBSD 4 上的模块构建错误。

工具/演示

  • 问题 #3717:修复了 Demo/embed/demo.c。
  • 问题 #4072:为 build_py_2to3 添加了一个 distutils 演示。

Python 3.0 发布候选版本 1 的新特性

发布日期:2008 年 9 月 17 日

核心和内置组件

  • 问题 #3827:memoryview 失去了 size 属性,转而使用 len(view)。
  • 问题 #3813:无法通过 cygwin 上的符号链接启动 python.exe。
  • 问题 #3705:修复了在命令行上为“-c”和“-m”参数提供非 ASCII 值时发生的崩溃。现在,在 Linux 下行为符合预期,尽管在 Windows 下稍后会失败。
  • 问题 #3279:在解释器中导入 site 静默失败,因为 site 模块使用了 open 内置函数,该函数当时未初始化。
  • 问题 #3660:修复了当编码器未返回字节对象时 str.encode() 中的引用泄漏。
  • 问题 #3774:在 PyTokenizer_FindEncoding 中添加了一些检查以处理错误情况。
  • 问题 #3594:修复 Parser/tokenizer.c:fp_setreadl(),使其通过文件路径或文件指针打开要标记化的文件,以方便 PyTokenizer_FindEncoding() 使用。
  • 问题 #3696:在 OpenBSD <= 4.4 和 Cygwin 上解析参数时出错。在这些系统上,mbstowcs() 函数稍微有点错误,必须使用 strlen() 来替换它,以计算表示多字节字符串所需的宽字符数。
  • 问题 #3697:“致命 Python 错误:无法从堆栈溢出中恢复” 在 Windows 调试模式下启用递归限制检查代码时很容易遇到,这是由于启用 USE_STACKCHECK 时对递归限制的错误处理造成的。
  • 问题 3639: 当将意外类型作为参数传递时,_warnings 模块可能会导致解释器段错误。
  • 问题 #3712:memoryview 对象存在引用泄漏,并且不支持循环垃圾回收。
  • 问题 #3668:修复了 PyArg_ParseTuple 和相关函数中 “s*” 参数解析器的内存泄漏,当正确解析 “s*” 的参数但后续参数解析失败时会发生此问题。
  • 问题 #3611:当 __del__ 方法重新引发异常时,在复杂的模式中可能清除异常的 __context__。
  • 问题 #2534:将 isinstance() 和 issubclass() 的速度提高 50-70%,以便在存在 __instancecheck__ / __subclasscheck__ 机制的情况下,达到 Python 2.5 的速度。在此过程中,修复了一个错误,当给定一个类元组作为第二个参数时,isinstance() 和 issubclass() 会在元组上而不是在每个类型对象上查找 __instancecheck__ / __subclasscheck__。
  • 问题 #3663:在打印 SyntaxErrors 时,Py_None 被递减引用。
  • 问题 #3651:修复了在使用缓冲区接口或当 PyArg_ParseTuple 的 “s#” 代码获得字节对象时发生的各种内存泄漏。
  • 问题 #3657:修复了在 pickle longs 时未初始化的内存读取。由 valgrind 发现。
  • 应用来自 Apple 的安全补丁。
  • 修复了使用 failmalloc 发现的内存分配失败导致的崩溃。
  • 修复了使用 valgrind 发现的内存泄漏,并更新了抑制文件。
  • 修复了 opt 模式下的编译器警告,这些警告会导致无效的内存读取。
  • 修复了 pychecker 报告的在 decimal 模块中使用错误名称的问题。
  • 问题 #3650:修复了 bytes.split('x') 中的引用泄漏。
  • bytes(o) 现在会尝试使用 o.__bytes__(),然后再使用回退方案。
  • 问题 #1204:configure 脚本现在会测试在链接 readline 时可能需要的其他库。这修复了一些平台(一些 Linux 发行版和 OpenBSD)上 x86_64 构建的问题。

C API

  • 添加了 PyObject_Bytes 和 PyBytes_FromObject。

  • 问题 #3756:使 re.escape() 能够处理字节和 str。
  • 问题 #3800:修复 formatter.py 中与 filter() 相关的错误。
  • 问题 #874900:修复 fork 后 threading 模块的行为。
  • 问题 #3535:zipfile 无法读取某些大于 2GB 的 zip 文件。
  • 问题 #3776:弃用 bsddb 包,以便在 3.0 中删除。
  • 问题 #3762:如果通过其符号链接启动 Python,platform.architecture() 会失败。
  • 问题 #3660:修复了 pickle 模块 C 加速器中的内存泄漏。
  • 问题 #3160:“bdist_wininst” distutils 命令不起作用。
  • 问题 #1658:tkinter 在 tkinter.BaseWidget 和 tkinter.scrolledtext.ScrolledText 中的迭代期间更改了字典大小。
  • bsddb 模块(以及 dbm.bsd 模块)已被删除。现在它在标准库之外维护,网址为 http://www.jcea.es/programacion/pybsddb.htm
  • 问题 600362:将 parse_qs() 和 parse_qsl() 从 cgi 模块重新定位到 urlparse 模块。在旧模块中添加了一个 DeprecationWarning,它将在未来被弃用。
  • 问题 #3719:如果 Python 二进制文件的路径中有空格,platform.architecture() 会失败。
  • 问题 3602:作为 r66135 合并的一部分,使 warnings.catch_warnings() 的参数仅为关键字。同时删除 DeprecationWarning。
  • 删除了对驼峰命名法 threading API 名称的弃用警告。
  • 问题 #3110:由于缺少 SEM_VALUE_MAX,multiprocessing 在 solaris 10 上无法编译。

扩展模块

  • 问题 #3782:os.write() 不得接受 unicode 字符串。
  • 问题 #2975:当从同一个 python 解释器使用 Visual Studio 2008 编译多个扩展模块时,某些环境变量会无限增长。
  • 问题 #3643:向 _testcapi 添加了一些检查,以防止通过利用糟糕的参数检查导致的段错误。
  • bsddb 代码更新到 4.7.3pre2 版本。此代码与 Python 2.6 的代码相同,因为目的是保持统一的 2.x/3.x 代码库。Python 代码使用 “2to3” 自动翻译。请不要在 Python 3.0 中手动更新此代码。更新 2.6 代码,然后执行 “2to3”。
  • _bytesio 和 _stringio 模块现在被编译到 python 二进制文件中。
  • 问题 #3492 和 #3790:修复了 zlib 模块和 zipimport 模块使用可变的 bytearray 对象,而它们应该使用不可变的 bytes 对象。
  • 问题 #3797:修复了 dbm、marshal、mmap、ossaudiodev 和 winreg 模块以返回 bytes 对象而不是 bytearray 对象。

工具/演示

  • 修复了 Misc/gdbinit,使其正常工作。

构建

  • 问题 #3812:如果配置了 --without-threads,则无法构建 python。
  • 问题 #3791:从 Windows 安装程序中删除 bsddb 模块,并从 Windows 构建文件中删除核心 bsddb 库。

Python 3.0b3 中的新功能?

发布日期:2008 年 8 月 20 日

核心和内置组件

  • 问题 #3653:修复了当 sys.excepthook 被调用时,如果使用了无效的参数,会导致段错误。

  • 问题 #2394:实现了更多 memoryview API,但需要注意的是,目前仅支持和练习一维连续缓冲区。添加了切片、切片赋值和比较(相等和不相等)。此外,还实现了 tolist() 方法,但仅适用于字节缓冲区。最后,已更新 API 以在返回 bytearray 的地方返回 bytes 对象。

  • 问题 #3560:清理了新的 C PyMemoryView API,以便命名在内部保持一致;添加了宏 PyMemoryView_GET_BASE() 和 PyMemoryView_GET_BUFFER() 来访问内存视图的有用属性,而无需依赖特定的实现;删除了命名不佳的 PyMemoryView() 函数(可以使用 PyMemoryView_GET_BUFFER() 代替)。

  • 作为 COM 方法的 ctypes 函数指针再次具有布尔值 True。

  • 问题 #1819:具有多个命名参数的函数调用现在平均快 35%(由 pybench 测量)。

  • 未记录的 C API PyUnicode_AsString() 和 PyUnicode_AsStringAndSize() 被设为解释器的私有 API,以便能够为 Python 3.1 改进它们的接口。

    如果您需要以字节字符串的形式访问 Unicode 对象的 UTF-8 表示,请使用 PyUnicode_AsUTF8String()。

  • 问题 #3460:由于 Python 3.0 更严格的语义允许避免连续重新分配结果字符串,PyUnicode_Join() 的实现速度提高了 10% 到 80%(这也会影响 str.join())。

  • 问题 #1276:为 CJK Mac 编码添加了临时别名,以解决 MacOS 上 CJK 区域设置的构建问题。它为与 Mac 编码几乎兼容的现有旧编解码器添加了四个临时映射。它们将在 3.1 中被正确实现的编解码器替换。
  • 问题 #3614:更正了 xmlrpc.client 中的一个拼写错误,导致 NameError “未定义全局名称 'header'”。
  • 问题 #2834:更新正则表达式库以匹配 py3k 的 unicode 标准。换句话说,混合使用字节和 unicode 字符串(无论是作为模式、搜索字符串还是替换字符串)都会引发 TypeError。此外,unicode 模式会自动启用 re.UNICODE 标志,可以通过指定新的 re.ASCII 标志来禁用它;至于字节模式,ASCII 匹配是唯一选项,尝试为这样的模式指定 re.UNICODE 会引发 ValueError。
  • 问题 #3300:使 urllib.parse.[un]quote() 默认为 UTF-8。由 Matt Giuca 贡献的代码。quote() 现在在引用之前对输入进行编码,unquote() 在取消引用后进行解码。有新的参数可以更改编码和错误设置。还有新的 API 可以跳过编码/解码步骤。[un]quote_plus() 也受到影响。
  • 问题 #2235:numbers.Number 现在阻止默认 id() 基于哈希的继承,因为该哈希机制对于数字类型是不正确的。从 Number 继承(而不仅仅是向其注册)的所有具体数字类型都必须明确提供哈希实现,以便它们的实例可哈希。
  • 问题 #2676:在电子邮件包中,由于正则表达式的二次或指数行为,内容类型解析会挂起病态输入。
  • 问题 #3476:通过新的 “io” 库进行的二进制缓冲读取现在是线程安全的。
  • 问题 #1342811:修复了 Tkinter.Menu.delete 中的泄漏。与菜单条目关联的命令未被删除。
  • 从 tarfile.py 中删除 TarFileCompat 类。
  • 问题 #2491:os.fdopen 现在几乎是内置 open() 的别名,并接受相同的参数。它只是检查其第一个参数是否为整数。
  • 问题 #3394:当传递文件名而不是 ZipInfo 实例时,zipfile.writestr 会设置外部属性,因此文件在 Unix 下以模式 0600 而不是 000 提取。
  • 问题 #2523:修复了在读取二进制文件而不请求特定长度时出现的二次行为。

扩展模块

  • 错误 #3542:支持 _msi 模块中的 Unicode 字符串。

Python 3.0b2 中的新功能?

发布日期:2008 年 7 月 17 日

核心和内置组件

  • 问题 #3008:float 类型有一个新的实例方法 'float.hex' 和一个新的类方法 'float.fromhex',分别用于将浮点数转换为十六进制字符串并从十六进制字符串转换。
  • 问题 #3083:为 str.format() 的 bin、oct、hex 输出添加了备用 (#) 格式。这将分别添加前缀 0b、0o 或 0x。
  • 问题 #3280:像 chr() 一样,“%c” 格式现在在所有配置上都接受超出基本多语言平面(高于 0xffff)的 unicode 代码点。在 “窄 Unicode” 构建上,结果是一个由 2 个代码单元组成的字符串,形成一个 UTF-16 代理对。
  • 问题 #3282:str.isprintable() 应该为未定义的 Unicode 字符返回 False。
  • 问题 #3236:从 PyLong_FromString 返回小的 long。
  • 异常回溯现在支持异常链接。

  • 删除了 sunaudio 模块。改用 sunau。
  • 问题 #3554:ctypes.string_at 和 ctypes.wstring_at 在没有持有 GIL 的情况下调用了 Python api 函数,当它们失败时可能会导致致命错误。
  • 问题 #799428:修复了 Tkinter.Misc._nametowidget 以解包 Tcl 命令对象。
  • 从 parser 模块中删除了 “ast” 函数别名。
  • 问题 #3313:修复了在失败的 dlopen() 调用未设置有效的 dlerror() 消息时发生的崩溃。
  • 问题 #3258:修复了在创建指向不完整结构的 ctypes POINTER 类型时发生的崩溃。
  • 问题 #2683:修复了 subprocess.Popen.communicate() 中的不一致性:参数现在在任何情况下都必须是字节对象。
  • 问题 #3145:当尝试加载标准库中每个模块的源代码时,help("modules whatever") 失败,包括测试套件中使用的无效文件。
  • gettext 库现在一致地使用 Unicode 字符串作为消息 ID 和消息字符串,并且ugettext()等等不再存在。
  • 已扩展回溯模块以处理链式异常。

C API

  • 问题 #3247:函数 Py_FindMethod 已被删除。现代类型应该改用 tp_methods slot。

工具/演示

  • Mac/Demos 目录已被删除。
  • 所有 Mac 脚本(包括 BuildApplet.py)已被删除。

Python 3.0b1 中的新功能?

发布日期:2008 年 6 月 18 日

核心和内置组件

  • 问题 #3211:warnings.warn_explicit() 没有防止其 “registry” 参数不是 dict 或 None。还修复了一个错误,当 “message” 和 “category” 都设置为 None 时,会导致总线错误。
  • 问题 #3100:修复了当子类化的弱引用持有对其引用对象的最后一个(强)引用时,释放该弱引用导致的崩溃问题。
  • 问题 #2630:实现了 PEP 3138。repr() 现在返回未转义的可打印 Unicode 字符,要获取对象的仅限 ASCII 的表示形式,请使用 ascii()。
  • 问题 #1342:在 Windows 上,如果 Python 安装在包含非 ASCII 字符的目录中,则无法启动。
  • 实现 PEP 3121:新的模块初始化和最终化 API。
  • 移除了已失效的-t选项。
  • 问题 #2957:修复了当解组许多代码对象时(当导入大型 .pyc 文件(约 1000 个函数)时会发生这种情况)出现的 ValueError“超出递归限制”错误。
  • 问题 #2963:修复了禁用所有类型的方法缓存的合并疏忽。
  • 问题 #2964:修复了 instancemethod_descr_get 中缺少 INCREF 的问题。
  • 问题 #2895:当给定字节对象作为关键字名称时,不会崩溃。
  • 问题 #2798:当使用 PyArg_ParseTuple 解析参数时,“s”代码现在允许任何 Unicode 字符串,并返回一个 utf-8 编码的缓冲区,就像 “s#” 代码已经做的那样。“z” 代码也得到了修正。
  • 问题 #2863:生成器现在有一个gen.__name__属性,其值等于gen.gi_code.co_name,就像func.__name___的值等于func.func_code.co_name一样。生成器的 repr() 现在也包含此名称。
  • 问题 #2831:enumerate() 现在有一个start参数。
  • 问题 #2801:修复了 float.is_integer 方法有时会错误引发 ValueError 的错误。
  • --with-toolbox-glue选项(以及相关的 pymactoolbox.h)已被移除。问题 #2196:hasattr() 现在允许不继承 Exception 的异常(KeyboardInterrupt 和 SystemExit)传播,而不是忽略它们。
  • #3021 异常重新引发的语义已得到显著改进。但是,f_exc_type、f_exc_value 和 f_exc_traceback 不能再从 Python 代码访问。
  • PyNumberMethods 的三个成员 nb_coerce、nb_hex 和 nb_oct 已被移除。

扩展模块

  • _winreg模块重命名为winreg如果平台存在常量,则支持 os.O_ASYNC 和 fcntl.FASYNC。.
  • winsound 模块已移除对 Windows 9x 的支持。
  • 问题 #2870:cmathmodule.c 编译错误。
  • symtable.Symbol 的方法

  • is_in_tuple()is_vararg(), is_keywordarg()已被移除。补丁 #3133:http.server.CGIHTTPRequestHandler 在 Windows 上不起作用。
  • 创建了一个新的
  • urllib包。它由以下代码组成:urllib2包。它由以下代码组成:, urlparse, robotparseris_keywordarg()。旧模块均已被移除。新包有五个子模块:urllib.parseurllib.request, urllib.response, urllib.error, urllib.robotparseris_keywordarg()urllib.request.urlopen()函数使用来自的 url 打开器。(请注意,单元测试在 beta 版中尚未重命名,但将来会重命名。)urlparserfc822 已被移除,取而代之的是 email 包。
  • mimetools 已被移除,取而代之的是 email 包。
  • 补丁 #2849:从标准库中移除 rfc822 模块的使用。
  • 添加了 io.StringIO 的 C 优化实现。
  • pickle
  • --with-toolbox-glue模块现在会自动使用 Pickler 和 Unpickler 的优化 C 实现(如果可用)。不再需要cPickle模块。移除了
  • htmllibsgmllib模块。已弃用的
  • SmartCookieSimpleCookiesgmllib类已从http.cookies中移除。.
  • --with-toolbox-gluecommands模块已被移除。它的 getoutput() 和 getstatusoutput() 函数已移动到subprocess模块中。
  • --with-toolbox-glue创建了http包;它包含旧的httplib,为, http.clienthttplib中移除。, ,以及httplibCookiecookielibhttp.cookiejar.
  • --with-toolbox-glue和三个httpHTTPServer模块的内容,为http.server。xmlrpc 包包含旧的xmlrpclibsgmllib模块,为xmlrpc.client.
  • --with-toolbox-glue和旧的SimpleXMLRPCServersgmllibDocXMLRPCServer的内容,为xmlrpc.server。创建了dbm包,其中包含旧模块anydbm), 包,其中包含旧模块whichdb), ,位于其包,其中包含旧模块和旧的__init__.py中,并具有包,其中包含旧模块dbm.gnu(以前是
  • --with-toolbox-gluegdbm)、dbm.bsd.
  • --with-toolbox-glue(以前是dbhash
  • dbm.ndbm)和dbm.dumb
  • (以前是dumbdbm)作为子模块。repr模块已重命名为
  • reprlib
  • --with-toolbox-glue。statvfs)、模块已移除。.
  • 问题 #1713041:修复了 pprint 对最大深度的处理。
  • --with-toolbox-glue问题 #2250:在评估 rlcompleter 的dbhash
  • --with-toolbox-glueCompleter.complete())、方法中的名称期间引发的异常现在会被捕获并忽略。.
  • 补丁 #2659:向 textwrap 的TextWrapper类添加了break_on_hyphens选项。问题 #2487:更改了当 n 太大而无法放入 C long 中时,math.ldexp(x, n) 的语义。如果 n 很大且为负数,ldexp(x, n) 现在返回零(具有适当的符号);以前,它会引发 OverflowError。sgmllibConfigParser.
  • 模块已重命名为
  • configparser
  • 。问题 #2865:webbrowser.open() 在 KDE 环境中再次工作。
  • multifile
  • 模块和
  • SocketServer
  • 模块已重命名为
  • socketserver
  • 。修复了
  • collections
  • 上的
  • __all__
  • 设置,以包括
  • UserList
  • UserString

工具/演示

  • 。sre 模块已被移除。

构建

Queue 模块已重命名为 queue。

copy_reg 模块已重命名为 copyreg。

核心和内置组件

  • mhlib 模块已被移除。
  • ihooks 模块已被移除。
  • fpformat 模块已被移除。
  • dircache 模块已被移除。
  • Canvas 模块已被移除。

扩展模块

  • Decimal 模块增加了魔术方法 __round__、__ceil__、__floor__ 和 __trunc__,以支持 round、math.ceil、math.floor 和 math.trunc。
  • user 模块已被移除。
  • mutex 模块已被移除。
  • imputil 模块已被移除。
  • os.path.walk 已被移除,取而代之的是 os.walk。

构建

  • pdb 增加了“until”命令。
  • test.test_support 模块已重命名为 test.support。
  • threading 模块 API 已重命名为符合 PEP 8 标准。旧名称仍然存在,但在不久的将来会被移除。

bgen 工具已被移除。

Python 3.0a5 中的新增功能?

核心和内置组件

  • 发布日期:2008 年 5 月 8 日

扩展模块

  • 修复了在 sizeof(size_t) > sizeof(long) 的系统上 PyLong_FromSsize_t 的错误行为。
  • 问题 #2221:修复了当 exec() 执行的代码引发异常,并且 sys.stdout.flush() 也引发错误时出现的 SystemError“未设置异常的错误返回”错误。

  • 错误 #2565:类型对象的 repr() 现在将其称为“类”,而不是“类型” - 无论它们是否是内置类型。
  • 命令行处理已转换为尽可能以未修改的方式传递 Unicode 字符串;因此,与命令行参数相关的 C API 已更改为使用 wchar_t。
  • 原始字符串中的所有反斜杠都按字面意思解释。这意味着 'u' 和 'U' 转义不会被特殊处理。
  • ctypes 对象现在支持 PEP3118 缓冲区接口。
  • 问题 #2682:ctypes 回调函数现在不再包含对自身的循环引用。
  • 问题 #2058:删除 buf 属性,并向 TarInfo 类添加 __slots__,以减少 tarfile 的内存使用。

错误 #2606:避免在 dict_keys 对象上调用 .sort()。

捆绑的 libffi 副本现在与最近发布的 libffi3.0.5 版本同步,除了对 Modules/_ctypes/libffi/configure.ac 的一些小更改。

核心和内置组件

  • 问题 #1496032:在 alpha 上,当 gcc 是编译器时,使用 -mieee。
  • “make install”现在是“make altinstall”的别名,以防止意外覆盖 Python 2.x 安装。使用 “make fullinstall” 强制将 Python 3.0 安装为 “python”。
  • 问题 #2544:在 HP-UX 系统上,当 gcc 用作编译器时,使用 “gcc -shared” 进行链接。
  • Python 3.0a4 中的新增功能?
  • 发布日期:2008 年 4 月 2 日
  • 修复了 dictobject.c 中的一个小的内存泄漏。解释器关闭时,空闲列表的内容没有被释放。
  • 将方法和内置函数对象的空闲列表限制为每个 256 个条目。
  • 补丁 #1953:添加了sys._compact_freelists()和 C API 函数PyInt_CompactFreeListsgmllibPyFloat_CompactFreeList用于压缩预分配的 int 和 float 的内部空闲列表。
  • 错误 #1983:修复了 fork()、fork1() 和 forkpty() 调用的返回类型。Python 期望返回类型为 int,但 fork 系列返回 pi_t。
  • 问题 #1678380:修复了在同一代码单元中出现 0j 和 -0j 时识别它们的错误。
  • 问题 #2025:添加了 tuple.count() 和 tuple.index() 方法以符合 collections.Sequence API。
  • 修复了 Python 解释器的多次重新初始化。longobject.c 中的小整数列表导致了第三次终结期间的段错误。
  • 问题 #1973:bytes.fromhex('') 引发 SystemError。
  • 问题 #1771:从 sorted() 和 list.sort() 中删除 cmp 参数。
  • 问题 #1969:bytearray 中的 split 和 rsplit 不一致。
  • map() 不再接受 None 作为第一个参数。请改用 zip()。
  • 问题 #1769:现在不允许使用 int("- 1")。
  • Object/longobject.c:long(float('nan')) 引发 OverflowError 而不是返回 0。
  • 问题 #1762972:如果 py 文件存在,则 __file__ 指向源文件而不是 pyc/pyo 文件。
  • 问题 #1393:如果对象不相等,object_richcompare() 返回 NotImplemented 而不是 False,以便给另一方一个机会。
  • 问题 #1692:解释器没有显示 SyntaxError 的位置。
  • 改进了 Windows 加载扩展模块失败时的一些异常消息。现在我们会得到例如“%1 不是有效的 Win32 应用程序”而不是“错误代码 193”。此外,使用 Unicode 字符串来处理非英语区域设置。
  • 问题 #1587:为 PyCFunctions 添加了 instancemethod 包装器。Python C API 获得了一个新的类型 PyInstanceMethod_Type 以及函数 PyInstanceMethod_Check(o)PyInstanceMethod_New(func)PyInstanceMethod_Function(im)
  • 常量 gc.DEBUG_OBJECT 和 gc.DEBUG_INSTANCE 已从 gc 模块中删除;gc.DEBUG_COLLECTABLE 或 gc.DEBUG_UNCOLLECTABLE 现在足以打印垃圾收集器考虑的相应对象列表。
  • 问题 #1573:不正确地使用仅关键字语法会导致解析器崩溃。
  • 问题 #1564:set 实现应该特殊处理 PyUnicode 而不是 PyString。
  • 补丁 #1031213:将 SyntaxError 中的源行解码回其原始源编码。
  • inspect.getsource() 再次包含装饰器。
  • 错误 #1713:posixpath.ismount() 声称指向挂载点的符号链接是挂载点。
  • 修复 utf-8-sig 增量解码器,当馈送到解码器的第一个块以 BOM 开头,但长度超过 3 个字节时,该解码器无法识别 BOM。

扩展模块

  • itertools ifilter()、imap() 和 izip() 的代码已移动到 bultins 并重命名为 filter()、map() 和 zip()。此外,将 izip_longest() 重命名为 zip_longest(),将 ifilterfalse() 重命名为 filterfalse()。
  • 问题 #1762972:将 reload() 函数作为 imp.reload() 重新添加。
  • 错误 #2111:当尝试写入使用 PROT_READ 打开的块时,mmap 会出现段错误。
  • 问题 #2063:更正 Windows 上 os.times() 结果中 utime 和 stime 的顺序。

  • Weakref 字典现在继承自 MutableMapping。
  • 在 collections 模块中创建了新的 UserDict 类。此类继承自 MutableMapping ABC 并符合其规范。此外,将 UserString 和 UserList 移动到 collections 模块。删除了 MutableUserString 类。
  • 删除了 UserDict.DictMixin。将其所有用法替换为 collections.MutableMapping。
  • 问题 #1703:getpass() 应该在写入提示后刷新。
  • 问题 #1585:IDLE 使用不存在的 xrange() 函数。
  • 问题 #1578:win_getpass 中存在问题。

构建

  • 将 --enable-unicode 配置标志重命名为 --with-wide-unicode,因为 Unicode 字符串不再可以禁用。

C API

  • 问题 #1629:将 Py_Size、Py_Type 和 Py_Refcnt 重命名为 Py_SIZE、Py_TYPE 和 Py_REFCNT。
  • 新的 API PyImport_ImportModuleNoBlock(),其工作方式类似于 PyImport_ImportModule(),但不会阻塞导入锁(而是返回错误)。

Python 3.0a2 的新特性?

发布日期:2007 年 12 月 7 日

(注意:此列表不完整。)

核心和内置组件

  • str8 现在具有与 bytes 相同的构造签名。
  • str 和 str8 之间的比较现在对于 ==/!= 返回 False/True。当从其 __conform__ 值重新创建对象时,sqlite3 返回 str8。struct 模块为所有与字符串相关的格式返回 str8。在这次更改之前情况就是这样,但由于字符串比较始终为 False,因此变得更加明显。
  • PyFile_FromFile() 替换为 PyFile_FromFd(fd, name. mode, buffer, encoding, newline)
  • 修复了 imp.find_module() 以遵守 -- coding: -- 标头。
  • __file__co_filename 更改为 unicode。路径名使用 Py_FileSystemDefaultEncoding 解码,并添加了一个新的 API 方法 PyUnicode_DecodeFSDefault(char*)
  • io.open() 和 _fileio.FileIO 添加了一个新的参数 closefd。false 值会禁用文件描述符的关闭。
  • 添加了一个新的选项 -b 来发布有关 bytes/buffer 和 str 之间某些操作的警告(对于错误,使用 -bb),如 str(b'') 和比较。
  • 当 C 运行时库为流返回无效的文件描述符时(fileno(stdin) < 0),标准流 sys.stdin、stdout 和 stderr 可能为 None。目前,这仅发生在 Windows GUI 应用程序和使用 pythonw.exe 启动的脚本中。
  • 为 VS 2008 添加了 PCbuild9 目录。
  • 将 structmember.h WRITE_RESTRICTED 重命名为 PY_WRITE_RESTRICTED,以解决 Windows 上与 VS 2008 的名称冲突。
  • 无绑定方法已经彻底消失。ClassObject.method 返回一个普通函数对象,instance.method 仍然返回一个绑定方法对象。绑定方法的 API 也被清理干净。删除了 im_class 属性,并将 im_func + im_self 重命名为 __func__ 和 __self__。工厂 PyMethod_New 仅接受 func 和 instance 作为参数。
  • Python.h 不再包含 intobject.h。其余部分已移动到 longobject.h。它仍然存在以定义从 PyInt 到 PyLong 函数的几个别名。
  • 删除了 sys.maxint,改用 sys.maxsize。

扩展模块

  • 删除了 hotshot 性能分析器;请改用 cProfile

  • 使用 testfile() 加载外部文件时,如果定义了 __loader__,则会忽略传入的 encoding 参数,并强制将源设置为 UTF-8。
  • 已删除方法 os.tmpnam()os.tempnam()os.tmpfile(),而倾向于使用 tempfile 模块。
  • 删除了“new”模块。
  • 从“types”模块中删除了所有可以通过内置函数轻松访问的类型。

Python 3.0a1 的新特性?

发布日期:2007 年 8 月 31 日

核心和内置组件

  • PEP 3131:支持非 ASCII 标识符。

  • PEP 3120:将默认编码更改为 UTF-8。

  • PEP 3123:对 PyObject 使用正确的 C 继承。

  • 删除了 __oct__ 和 __hex__ 特殊方法,并添加了一个 bin() 内置函数。

  • PEP 3127:八进制文字现在以“0o”开头。旧式的八进制文字无效。二进制文字以“0b”为前缀。这也影响 int(x, 0)。

  • None、True、False 现在是关键字。

  • PEP 3119:isinstance() 和 issubclass() 可以被覆盖。

  • 删除 BaseException.message。

  • 删除元组参数解包 (PEP 3113)。

  • 从框架中删除 f_restricted 属性。这自然会导致删除 PyEval_GetRestricted() 和 PyFrame_IsRestricted()。

  • PEP 3132 被接受。这意味着你可以这样做a, *b = range(5)将 0 分配给 a,并将 [1, 2, 3, 4] 分配给 b。

  • range() 现在返回一个迭代器而不是列表。不允许使用浮点数。不再定义 xrange()。

  • 补丁 #1660500:隐藏列表推导式中的迭代变量,添加集合推导式,并使用通用代码来处理迭代表达式的编译。

  • 默认情况下,!= 返回与 == 相反的值,除非后者返回 NotImplemented。

  • 补丁 #1680961:sys.exitfunc 已被删除,并替换为私有 C 级 API。

  • PEP 3115:新的元类:元类现在在类语句中指定为关键字参数,现在可以使用参数列表的完整语法。此外,元类可以实现 __prepare__ 函数,该函数将被调用来创建新类命名空间的字典。

  • 删除了 PyFloat_FromString() 中长期不推荐使用的参数“pend”。

  • dir() 函数已扩展为在其参数上调用 __dir__() 方法(如果存在)。如果不存在,它将像以前一样工作。这允许在存在 __getattr__() 的情况下自定义 dir() 的输出。

  • 删除了对 __members__ 和 __methods__ 的支持。

  • 删除了 BaseException 的索引/切片。

  • input() 变为 raw_input():名称 input() 现在实现以前称为 raw_input() 的功能;不再定义名称 raw_input()。

  • “except”子句中列出的类必须继承自 BaseException。

  • PEP 3106:dict.iterkeys()、.iteritems()、.itervalues() 现在已消失;.keys()、.items()、.values() 返回类似集合的字典视图。

  • PEP 3105:print 现在是一个函数。此外(不在 PEP 中),文件的“softspace”属性现在已消失(因为 print() 不使用它)。此更改的副作用是,你可以在交互式会话中获取不完整的输出行。

    >>> print(42, end="")
    42>>>
    

    我们可能会在 I/O 库重写之后修复此问题。

  • PEP 3102:仅关键字参数。

  • Int/Long 统一完成。“long”内置类型和带有尾随“L”或“l”的文字已被删除。性能可能不是最佳的(尚未真正进行基准测试)。

  • “except E, V”现在必须拼写为“except E as V”,并在 except 子句的末尾删除 V;V 必须是一个简单的名称。

  • 根据 PEP 3107 添加了函数注解。

  • 根据 PEP 3104 添加了 nonlocal 声明

    >>> def f(x):
    ...     def inc():
    ...         nonlocal x
    ...         x += 1
    ...         return x
    ...     return inc
    ...
    >>> inc = f(0)
    >>> inc()
    1
    >>> inc()
    2
    
  • 将 intern() 移动到 sys.intern()。

  • exec 现在是一个函数。

  • 将 nb_nonzero 重命名为 nb_bool,并将 __nonzero__ 重命名为 __bool__。

  • 经典类已成为过去。所有类都是新样式。

  • 异常必须派生自 BaseException。

  • 整数除法始终返回浮点数。不再有 -Q 选项。以下所有内容都已消失

    • PyNumber_Divide 和 PyNumber_InPlaceDivide
    • __div__、__rdiv__ 和 __idiv__
    • nb_divide、nb_inplace_divide
    • operator.div、operator.idiv、operator.__div__、operator.__idiv__ (仅保留 __truediv__ 和 __floordiv__,不确定如果我们想重用 __div__ 及其朋友,应该如何处理它们。如果我们这样做,将更难为 2.x 和 3.x 编写代码。)
  • “as”和“with”是关键字。

  • 绝对导入是“import foo”等的默认行为。

  • 删除了对以下语法的支持:反引号(即,x)、<>。

  • 删除了以下 Python 内置函数:apply()、callable()、coerce()、execfile()、file()、reduce()、reload()。

  • 删除了以下 Python 方法:{}.has_key。

  • 删除了以下操作码:BINARY_DIVIDE、INPLACE_DIVIDE、UNARY_CONVERT。

  • 删除对受限执行的 C API 支持。

  • zip()、map() 和 filter() 现在返回迭代器,其行为类似于它们的 itertools 对等项。这也影响了 map() 在不等长序列上的行为 - 它现在在最短的序列耗尽后停止。

  • 添加:集合文字、集合推导式、省略号文字。

  • 根据 PEP 3129 添加了类装饰器。

扩展模块

  • 删除了 imageop 模块。随着 rgbimg 和 imgfile 的删除,其单元测试变得无用的陈旧模块。
  • 从 operator 模块中删除了以下属性:div、idiv、__div__、__idiv__、isCallable、sequenceIncludes。
  • 从 sys 模块中删除了以下属性:exc_clear()、exc_type、exc_value、exc_traceback。

  • 删除了 compiler 包。使用 _ast 模块和(最终的)AST -> 字节码机制。
  • 删除了以下模块:audiodev、Bastion、bsddb185、exceptions、linuxaudiodev、md5、MimeWriter、mimify、popen2、rexec、sets、sha、stringold、strop、sunaudiodev、timing、xmllib。
  • 将 toaiff 模块移动到 Tools/Demos。
  • 删除了过时的 IRIX 模块:al/AL、cd/CD、cddb、cdplayer、cl/CL、DEVICE、ERRNO、FILE、fl/FL、flp、fm、GET、gl/GL、GLWS、IN、imgfile、IOCTL、jpeg、panel、panelparser、readcd、sgi、sv/SV、torgb、WAIT。
  • 删除了过时的函数:commands.getstatus()、os.popen*()。
  • 删除了 string 模块中也是字符串方法的函数;删除 string.{letters、lowercase、uppercase}。
  • 删除了对长期过时的平台的支持:plat-aix3、plat-irix5。
  • 删除了 xmlrpclib.SlowParser。它是基于 xmllib 的。
  • 补丁 #1680961:atexit 已用 C 语言重新实现。
  • 添加了 UTF-32、UTF-32-LE 和 UTF-32-BE 的新编解码器。

构建

C API

  • 移除了这些 Python 插槽:__coerce__、__div__、__idiv__、__rdiv__。
  • 移除了这些 C API:PyNumber_Coerce()、PyNumber_CoerceEx()、PyMember_Get、PyMember_Set。
  • 移除了这些 C 插槽/字段:nb_divide、nb_inplace_divide。
  • 移除了这些宏:staticforward、statichere、PyArg_GetInt、PyArg_NoArgs、_PyObject_Del。
  • 移除了这些 typedef:intargfunc、intintargfunc、intobjargproc、intintobjargproc、getreadbufferproc、getwritebufferproc、getsegcountproc、getcharbufferproc、memberlist。

测试

  • 移除了 test.testall,因为它已被 test.regrtest 取代。

文档

Mac

  • cfmfile 模块已被移除。

平台

  • 已移除对 BeOS 和 AtheOS 的支持(根据 PEP 11)。
  • 已移除对 RiscOS、Irix、Tru64 的支持(据称)。

工具/演示

(有关旧版本的更多信息,请查阅 HISTORY 文件。)