Python 3 兼容性模块#

注意

这是从旧 IPython wiki 原封不动复制过来的,目前正在开发中。开发指南的这一部分中的许多信息已过时。

IPython.utils.py3compat 模块提供了一些函数,以便更轻松地为 Python 2 和 3 编写代码。我们还在设置过程中使用 2to3 来更改语法,以及 io.open() 函数,它本质上是 Python 3 中内置的 open 函数。

提供的名称为

  • PY3:Python 3 中为 True,Python 2 中为 False。

其他#

  • input:在 Python 2 上引用 raw_input,在 Python 3 上引用 input(需要,因为 2to3 仅转换对 raw_input 的调用,而不转换对其他名称的赋值)。

  • builtin_mod_name:导入以获取内置函数的字符串名称(__builtin__ –> builtins)。

  • isidentifier:检查字符串是否为有效的 Python 标识符。

  • open:Python 3 启用 unicode 的 open 的简单包装器。类似于 codecs.open,但允许通用换行符。当前实现仅支持最简单的用法。

  • MethodType:Python 3 中的 types.MethodType。仅接受两个参数:函数、实例。Python 2 的类参数会自动填充。

  • doctest_refactor_print:可以在字符串或函数上调用(或用作装饰器)。在 Python 3 中,它将 doctest 中的 print 语句转换为 print() 调用。2to3 对真正的 doctest 执行此操作,但我们在其他几个地方需要它。它只使用正则表达式,这对于当前的情况来说已经足够了。

  • u_format:当测试使用 unicode 字符串的 repr() 时,应编写 '{u}"thestring"',并将其提供给此函数,该函数将生成 'u"thestring"'(对于 Python 2)和 '"thestring"'(对于 Python 3)。也可以用作装饰器,以处理文档字符串。

  • execfile:在 Python 3 上返回(在 Python 3 上不再是内置函数),并升级为在 Python 2 上处理 Unicode 文件名。