注意: 虽然 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 选项时,分词器会警告不一致的空格和制表符混合。两个 -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.get(k) 存在则返回 d[k],否则返回 None(或可选的第二个参数)。
  • 有一个新的回归测试工具,它测试更多的模块。(要运行测试,请执行 "import test.autotest"。)
  • 解释器在 sys.path 的初始值方面更加智能;您可以使用 $PYTHONHOME 更轻松地控制它(请参阅使用信息,例如尝试python -h)。在大多数情况下,解释器可以安装在任意位置而无需重新编译。
  • 构建过程现在构建一个包含除 main() 入口点之外所有内容的单个库 (libpython1.5.a)。这使得嵌入 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 中的更改:当反序列化一个未定义 __getinitargs__() 方法的类实例时,__init__() 构造函数不再被调用。这使得更大一部分类默认可序列化,但偶尔可能会改变语义。要强制在反序列化时调用 __init__(),请定义一个 __getinitargs__() 方法。还有其他更改,特别是 cPickle 现在正确处理包中定义的类。同样的更改也适用于使用 copy.py 复制实例。
  • “re”(Perl 正则表达式)模块中的区域设置支持。使用标志 re.L(或 re.LOCALE)为 w 和 b 启用特定于区域设置的匹配规则。此标志的内联语法是 (?L)。
  • 内置函数 isinstance(x, y) 现在在 y 是类型对象且 type(x) 是 y 时也成功。
  • 类和实例对象的 repr() 和 str() 现在反映了定义该类的包/模块。
  • 模块 "ni" 已被移除。(如果您确实需要它,它已被重命名为 "ni1"。如果这给您带来了任何问题,请告诉我。鼓励包作者编写支持 ni 和 1.5 包支持的 __init__.py 文件,以便相同的版本可以与 Python 1.4 和 1.5 一起使用。)
  • 当配置线程时,thread 模块现在会自动包含。(您必须从现有的 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 日版本)。