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

Python 1.5 及更高版本的新特性

如果您下载了源代码发行版,那么在 Misc/NEWS 文件中,自从 1.4 版本以来,有一长串的更改列表。下面是一些亮点。(或者直接跳转到 1.5b1 中的新特性1.5b2 中的新特性1.5(最终版)中的新特性的列表。)

从 1.5 到 1.5.1 - 亮点

  • 文档现在是分离的——从文档页面下载。
  • 新的 python-mode.el(Emacs/Xemacs 编辑模式)。
  • 打印递归字典和列表不再导致核心转储。
  • 不带参数的 raise 语句会重新引发当前函数中引发的最后一个异常。
  • import 语句现在在不同线程之间进行序列化。
  • 最终化顺序更加合理。
  • 在 Mac 和 Windows 上,模块文件名称的大小写必须与 import 语句中使用的大小写匹配。(当然,在 Unix 上,情况始终如此。)
  • 当您指定 -t 选项时,tokenizer 会警告空格和制表符的不一致混合。两个 -t 选项会导致语法错误。另请参阅 Tools/scripts/tabnanny.py。所有库模块都是无警告的。
  • freeze 工具现在支持分层模块名称。
  • 新的标准模块:threading、getpass、imaplib、poplib、smtplib、Tkdnd (Tkinter 拖放)。
  • 一些在很久以前就被声明为过时的模块已经从标准库路径中移出。

从 1.4 到 1.5 - 亮点

  • 它快得多(Lib/test/pystone.py 基准测试几乎快了两倍。)
  • 现在有一个 assert 语句assert <condition>assert <condition>, <errormessage>。如果条件评估为 false,则引发 AssertionError。默认错误消息为空;断言语句的源代码文本作为回溯的一部分打印。
  • 现在内置支持导入分层模块名称(例如“import spam.ham.eggs”);ni 被声明为过时。请注意,内置包支持稍微简单一些(没有 __ 和 __domain__),并且在一个关键方面有所不同:__init__.py 是必需的,并且加载到包的命名空间中,而不是作为子模块。有关更多信息,请参阅内置包支持
  • 新的“re”模块(Perl 风格的正则表达式)在这里。它基于 Philip Hazel 的 pcre 代码;Python 接口由 Andrew Kuchling 组装。regex 模块被声明为过时。
  • 为了支持 re 模块,引入了一种新的字符串文字形式,“原始字符串”:例如,r"n" 等于 "\n"。
  • 所有标准异常和大多数在标准扩展模块中定义的异常现在都是类。使用 python -X 恢复为字符串异常。有关更多信息,请参阅标准异常类
  • 比较现在可以引发异常(以前,比较期间发生的异常会被忽略)。
  • 新的字典方法:.clear()、.copy()、.update()、.get()。前两个很明显;d1.update(d2) 等效于 for 循环for k in d2.keys(): d1[k] = d2[k]; 如果 d[k] 存在,d.get(k) 返回 d[k],否则返回 None(或可选的第二个参数)。
  • 有一个新的回归测试工具,它可以测试更多的模块。(要运行测试,请执行“import test.autotest”。)
  • 解释器对于 sys.path 的初始值更加智能;您可以使用 $PYTHONHOME 更轻松地控制它(请参阅用法消息,例如尝试python -h)。在大多数情况下,解释器可以安装在任意位置,而无需重新编译。
  • 构建过程现在构建一个单独的库 (libpython1.5.a),其中包含除 main() 入口点之外的所有内容。这使得嵌入 Python 的应用程序的生活更加轻松。
  • 对嵌入的支持更好,包括线程、多个解释器 (!)、取消初始化以及访问全局解释器锁。
  • 有一个 -O 选项可以删除 SET_LINENO 指令、assert 语句和以以下代码为前缀的代码if __debug__: ...。(它仍然只产生几个百分点的差异,所以不要太激动。)
  • 大重命名已完成:Python 定义的所有链接器可见符号现在都带有“Py”或“_Py”前缀,大多数宏和 typedef 也是如此。

从 1.5a4 到 1.5b1

如果您是 alpha 测试人员,以下是自 1.5a4 以来最相关的更改(当然,所有已知的错误都已修复,泄漏已堵塞,并且添加了一些文档)。自 1.5a4 以来的完整更改列表在 Misc/NEWS 文件的末尾给出。

  • 包目录现在需要存在 __init__.py(或适用的 .pyc/.pyo)。包现在可以包含共享库模块。
  • 新模块“fileinput”用于迭代文件列表的行。
  • 新模块“locale”用于本地化的数字格式和字符串大小写敏感度。
  • 新模块“xmllib”用于解析 XML 文件。
  • 更多对 Tk 扩展(PIL、TIX、BLT、TOGL)的支持。
  • 修复了模块“rfc822”中的地址列表解析。
  • 更多针对“re”模块的部署(只有一个修复)。
  • Emacs 的新 Python 模式。
  • OS/2 支持。

从 1.5b1 到 1.5b2

  • 感谢所有为库模块贡献文档字符串的人!
  • 由缩进的预处理器命令和 C++ 风格的注释引起的移植性问题现在应该已经消失了。
  • 再次对 python-mode.el 进行了大量改进。
  • pickle.py 和 cPickle.c 中的更改:当 unpickling 一个未定义 __getinitargs__() 方法的类的实例时,不再调用 __init__() 构造函数。这使得默认情况下可以 pickle 更大的一组类,但有时可能会更改语义。要强制在 unpickling 时调用 __init__(),请定义一个 __getinitargs__() 方法。其他更改也是如此,特别是 cPickle 现在可以正确处理包中定义的类。同样的更改也适用于使用 copy.py 复制实例。
  • “re”(Perl 正则表达式)模块中的区域设置支持。使用标志 re.L(或 re.LOCALE)为 w 和 b 启用特定于区域设置的匹配规则。此标志的内联语法为 (?L)。
  • 当 y 是类型对象并且 type(x) 是 y 时,内置函数 isinstance(x, y) 现在也会成功。
  • 类和实例对象的 repr() 和 str() 现在反映定义该类的包/模块。
  • 模块“ni”已被删除。(如果您确实需要它,它已被重命名为“ni1”。如果这对您造成任何问题,请告诉我。鼓励包作者编写同时支持 ni 和 1.5 包支持的 __init__.py 文件,以便同一版本可以与 Python 1.4 和 1.5 一起使用。)
  • 配置线程时,线程模块现在会自动包含。(您必须从现有的 Setup 文件中删除它,因为它现在位于自己的 Setup.thread 文件中。)
  • 新的命令行选项“-x”用于跳过脚本的第一行;方便在非 Unix 平台上制作可执行脚本。
  • 在 importdl.c 中,将 RTLD_GLOBAL 添加到 dlopen() 标志。我没有检查这会如何影响事情,但它应该使一个共享库中的符号可用于下一个共享库。
  • Windows 配置添加了一个新的主程序“pythonw”,并注册了一个新的扩展名“.pyw”来调用它。这是一个标准的 Python 解释器,不会弹出控制台窗口;方便纯 Tkinter 应用程序。发送到原始 stdout 和 stderr 的所有输出都会丢失;从原始 stdin 读取会产生 EOF。

从 1.5b2 到 1.5(最终版)

  • 感谢所有贡献文档字符串或其他文档的人!
  • 文档的质量有了许多小的改进,包括 PostScript、HTML 甚至是 Emacs info(仅限库手册)。
  • 新的模块 telnetlib.py。
  • 新的工具 versioncheck。
  • 修复了 urllib.py 中 ftp URL 的两个错误。
  • 修复了打印 __builtins__ 时的无限递归。
  • 在 Tkinter.py 中修复了一些小问题。
  • 将 zlibmodule.c 和 bsddbmodule.c 移植到 NT。
  • tempfile.py 中更好的 NT 支持。
  • 修复了 4294967296==0。
  • 最新的 re 和 pcre 模块(12 月 22 日的版本)。