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

Python 1.6.1

Python 1.6.1

注意:请查看 下载页面 以获取更新的版本。

新增功能?

Python 1.6 是在 CNRI 开发的最后一个版本,也是 CNRI 发布的唯一一个带有开源许可证的版本。在发布 Python 1.6 之后,以及 Guido van Rossum 离开 CNRI 与商业软件开发人员合作之后,很明显,能够在 GNU 通用公共许可证 (GPL) 下使用 Python 是非常理想的。CNRI 和自由软件基金会 (FSF) 进行了互动,以制定启用 Python 许可证的措辞更改。Python 1.6.1 与 Python 1.6 基本相同,只有一些小的错误修复,并且具有 GPL 兼容许可证。

注意:根据 CNRI 的说法,Python 1.6.1 是 GPL 兼容的,但是 FSF 的律师 表示 Python 1.6.1 与 GPL 不兼容。CNRI 不同意,并表示 FSF 的律师已告知 CNRI 的律师 1.6.1 与 GPL “不不兼容”。

下载

Python 1.6.1 现已可供下载。它在 CNRI 开源 GPL 兼容许可证下发布。

Windows 用户注意事项: 某些浏览器会删除下载的安装程序文件的“.exe”后缀。如果您遇到这种情况,只需将下载的文件重命名为“python16.exe”,然后双击它以运行安装程序。此外,如果您曾经安装过旧版本的 Python(尤其是 PythonWare 的发行版),则可能必须从 autoexec.bat 中删除对其的引用。不兼容警告: 当调用 os.popen*() 系列中的函数时,Norton Antivirus 2000 可能会导致 Windows 98 上的蓝屏崩溃。要防止此问题,请在使用 Python 时禁用 Norton Antivirus。(在带有 Norton Antivirus 版本 6.10.20 的 Windows 98 第二版上已确认。相同的 Norton Antivirus 版本在 Windows 2000 上没有此问题。Windows 98SE 上的 Norton Antivirus 版本 5 也没有此问题。)

错误和补丁

要报告错误,请始终使用 SourceForge Bug Tracker。如果您有补丁,请使用 SourceForge Patch Manager请务必说明这是 Python 1.6.1 的错误报告或补丁!

1.6.1 版本的新增功能是什么?

  • 新的许可证(见上文)。
  • 已修复 C API 函数 PyList_Reverse() 中的核心转储。
  • 1.6 版本意外地包含了一些 .pyc 文件;这些文件已被删除。

1.6 版本的新增功能是什么?

以下是自 1.5.2 版本以来所有相关更改的列表。

源代码不兼容

一些小的库不兼容更改可能会让您感到困惑

  • 列表的 append() 方法不再能使用多个参数调用。以前,它会附加一个由所有参数组成的单个元组,但这是未记录的。要附加元组,请使用例如 l.append((a, b, c))。
  • 套接字的 connect()、connect_ex() 和 bind() 方法需要恰好一个参数。以前,您可以调用 s.connect(host, port),但这是未记录的。您现在必须编写 s.connect((host, port))。
  • str() 和 repr() 函数现在更频繁地不同。对于长整数,str() 不再附加 'L'。因此,str(1L) == '1',以前是 '1L';repr(1L) 不变,仍然返回 '1L'。对于浮点数,repr() 现在给出 17 位精度,以确保不会丢失精度(在所有当前硬件上)。
  • 已删除 -X 选项。内置异常现在始终是类。许多库模块也已转换为基于类的异常。

二进制不兼容

为 Python 1.5.x 构建的第三方扩展不能与 Python 1.6 一起使用;这些扩展必须为 Python 1.6 重新构建。

在 Windows 上,尝试导入为 Python 1.5.x 构建的第三方扩展会导致立即崩溃;对此我们无能为力。检查您的 PYTHONPATH 环境变量!

自 1.5.2 以来的更改概述

对于此概述,我借鉴了 Andrew Kuchling 和 Moshe Zadka 的文档 “Python 2.0 中的新增功能”:http://starship.python.net/crew/amk/python/writing/new-python/

有很多新模块,并且修复了很多错误。下面列出了所有新模块的列表。

可能最普遍的更改是添加了 Unicode 支持。我们添加了一种新的基本数据类型,即 Unicode 字符串,一个新的内置函数 unicode(),以及许多用于处理 Unicode 和编码的 C API。有关详细信息,请参见文件 Misc/unicode.txt,或 http://starship.python.net/crew/lemburg/unicode-proposal.txt

与 Unicode 支持相关的另外两个重大更改是添加了字符串方法和新的正则表达式引擎

  • 字符串方法意味着您现在可以说 s.lower() 等,而不是导入字符串模块并说 string.lower(s) 等。一个特殊之处是,string.join(sequence, delimiter) 的等效项是 delimiter.join(sequence)。使用 " ".join(sequence) 来实现 string.join(sequence) 的效果;为了使此更具可读性,请先尝试 space=" "。请注意,split() 和 replace() 中的 maxsplit 参数的默认值已从 0 更改为 -1。
  • 新的正则表达式引擎,Fredrik Lundh 的 SRE,与旧引擎完全向后兼容,实际上是使用相同的接口(“re” 模块)调用的。您可以通过 import pre 显式调用旧引擎,或通过 import sre 显式调用 SRE 引擎。SRE 比 pre 快,并且支持 Unicode(这是投入精力开发另一个新的正则表达式引擎的主要原因——这至少是第四个!)。

其他更改

其他不会破坏代码但值得了解的更改

即使对于深度嵌套的数据结构,删除对象现在也是安全的。

长/整数统一:长整数可以用在 seek() 调用中,作为切片索引。

字符串格式化(s % args)有一个新的格式化选项 '%r',它的作用类似于 '%s',但插入 repr(arg) 而不是 str(arg)。(尚未在 alpha 1 中。)

包括 Greg Ward 的 “distutils” 包:这将使安装、构建和分发第三方包变得更加简单。

现在有特殊的语法可以代替 apply() 函数。f(*args, **kwds) 等效于 apply(f, args, kwds)。您还可以使用变体 f(a1, a2, *args, **kwds),并且可以省略其中一个:f(*args)、f(**kwds)。

内置函数 int() 和 long() 接受一个可选的第二个参数来指示转换基数——当然,前提是第一个参数是字符串。这使得 string.atoi() 和 string.atol() 过时了。(string.atof() 已经过时了)。

当一个局部变量被编译器识别,但在使用时未定义时,会引发一个新的异常 UnboundLocalError。这是一个从 NameError 派生的类,因此捕获 NameError 的代码仍然有效。目的是在以下示例中提供更好的诊断

x = 1
def f():
    print x
    x = x+1

这过去会在 print 语句上引发 NameError,这甚至让有经验的 Python 程序员感到困惑(特别是如果引用和对 x 的赋值之间有数百行代码的情况下 :-)。

您现在可以通过定义 __contains__ 方法来覆盖 'in' 运算符。请注意,它的参数是倒序的:x in a 会导致调用 a.__contains__(x)。这就是为什么名称不是 __in__ 的原因。

异常 AttributeError 将具有更友好的错误消息,例如'Spam' 实例没有属性 'eggs'。这可能会破坏代码,该代码期望消息与属性名称完全相同。

Vladimir Marangozov 为分配内存设计了更合理的 C API。请参阅 mymalloc.h。

1.6 中的新模块

UserString - 从字符串类型派生的基类。

distutils - 用于分发 Python 模块的工具。

robotparser - 解析 robots.txt 文件,用于编写网络蜘蛛。(从 Tools/webchecker/ 移动。)

linuxaudiodev - Linux 的音频。

mmap - 将文件视为内存缓冲区。(Windows 和 Unix。)

sre - 正则表达式(速度快,支持 unicode)。目前,这段代码非常粗糙。最终,re 模块将使用 sre 重新实现(无需更改 re API)。

filecmp - 取代旧的 cmp.py 和 dircmp.py 模块。

tabnanny - 检查 Python 源代码中制表符宽度依赖性。(从 Tools/scripts/ 移动。)

urllib2 - 新的、改进的但与 urllib 不兼容的版本(仍然是实验性的)。

zipfile - 读取和写入 zip 存档。

codecs - 支持 Unicode 编码器/解码器。

unicodedata - 提供对 Unicode 3.0 数据库的访问。

_winreg - Windows 注册表访问。

encodings - 包,提供大量标准编解码器——目前仅适用于新的 Unicode 支持。它有一个即插即用的扩展机制,允许您只需将新编解码器复制到 encodings 包目录中即可添加新的编解码器。亚洲编解码器支持可能会作为单独的发行包提供,该包基于此技术和新的 distutils 包构建。

更改的模块

readline、ConfigParser、cgi、calendar、posix、readline、xmllib、aifc、chunk、wave、random、shelve、nntplib - 小幅增强。

socket、httplib、urllib - 可选的 OpenSSL 支持(仅限 Unix)。

_tkinter - 支持 8.0 到 8.3。已删除对 8.0 之前版本的支持。

string - 此模块的大部分现在已被弃用,因为字符串具有方法。这不再使用内置的 strop 模块,而是利用新的字符串方法来为 Unicode 和普通字符串提供透明支持。

Windows 上的更改

安装程序不再运行单独的 Tcl/Tk 安装程序;相反,它将所需的 Tcl/Tk 文件直接安装在 Python 目录中。如果您已经安装了 Tcl/Tk,这将浪费一些磁盘空间(约 4 MB),但避免了 Tcl/Tk 安装冲突的问题,并使 Python 更容易确保 Tcl/Tk 可以找到其所有文件。注意:alpha 安装程序不包含文档。

现在,Windows 安装程序默认将 Python 安装在默认卷的 Python16 目录下,而不是 Program FilesPython-1.6 目录下。

工具变更

IDLE - 完全重构。请访问 IDLE 主页 以获取更多信息。(Python 1.6 alpha 1 将带有 IDLE 0.6。)

Tools/i18n/pygettext.py - Python 版本的 xgettext(1)。一个用于 Python 编写的应用程序国际化的消息文本提取工具。

废弃的模块

stdwin 以及所有使用它的模块。(如果需要,请使用 Python 1.5.2。 :-)

soundex。(Skip Montanaro 有一个 Python 版本,但它不会包含在 Python 发布版本中。)

cmp, cmpcache, dircmp。(已替换为 filecmp。)

dump。(使用 pickle。)

find。(使用 os.walk() 可以轻松编码实现。)

grep。(作为库模块不是很有用。)

packmail。(不再有任何用途。)

poly, zmod。(这些充其量只是很差的示例。)

strop。(string 模块不再需要它。)

util。(此功能早已内置在其他地方。)

whatsound。(使用 sndhdr。)

从 1.6b1 到 1.6 的详细变更

CNRI 许可协议的轻微变更。添加了版权声明;当将衍生作品提供给“他人”而不是仅仅“公众”时,才需要指出修改的性质;版本和日期已更新。新许可证有一个新的句柄。

添加了 Tools/compiler 包。这是由 Jeremy Hylton 领导的项目,旨在用 Python 编写 Python 字节码生成器。

函数 math.rint() 已被删除。

在 Python.h 中,添加了 "#define _GNU_SOURCE 1"。

包含 Greg Ward 的 distutils 的 0.9.1 版本(而不是 0.9 版本)。

包含 SRE 的新版本。它更稳定,并且与旧的 RE 模块更兼容。不匹配的范围用 -1 表示,而不是 None。(文档中说是 None,但 PRE 实现使用了 -1;改为 None 会破坏现有代码。)

winreg 模块已重命名为 _winreg。(计划有一个更高层次的名为 winreg 的 API,但尚未以专家可以接受的形式实现。)

默认启用 _locale 模块。

修复了 _curses 模块的配置行。

修复了一些崩溃问题,特别是当 <file>.writelines() 使用包含非字符串对象的列表时会崩溃,以及在某些情况下丢失 SyntaxError 可能导致核心转储。

<list>.extend() 方法现在接受任意序列参数。

如果 __str__() 或 __repr__() 返回 Unicode 对象,则会将其转换为 8 位字符串。

Unicode 字符串比较不再考虑 UTF-16 编码的特殊性;它是直接的 16 位比较。

Windows 安装程序现在安装 LICENSE 文件,并且不再在注册表中注册 Python DLL 版本(不再需要)。现在使用 Tcl/Tk 8.3.2。

修复了一些可移植性问题,特别是涉及 socklen_t 的编译错误。

PC 配置对非微软编译器更加友好。