重要

本文档涵盖 IPython 6.0 及更高版本。从 6.0 版本开始,IPython 不再支持与低于 3.3 的 Python 版本(包括所有版本的 Python 2.7)的兼容性。

如果您正在寻找与 Python 2.7 兼容的 IPython 版本,请使用 IPython 5.x LTS 版本并参阅其文档(LTS 是长期支持版本)。

将对象与 IPython 集成

制表符补全

要更改对象制表符补全时显示的属性,请为其定义一个 __dir__(self) 方法。有关更多详细信息,请参阅内置 dir() 函数 的文档。

您还可以自定义对象的键补全,例如在 obj["a 后按制表符。为此,请定义一个方法 _ipython_key_completions_(),它返回一个对象列表,这些对象是下标表达式 obj[key] 中可能的键。

在 5.0 版本中添加: 自定义键补全

丰富显示

自定义方法

IPython 可以显示更丰富的对象表示形式。为此,您可以定义 _ipython_display_() 或任意数量的 _repr_*_() 方法。请注意,这些方法周围使用的是单下划线,而不是双下划线。

支持的 _repr_*_ 方法

格式

REPL

笔记本

Qt 控制台

_repr_pretty_

_repr_svg_

_repr_png_

_repr_jpeg_

_repr_html_

_repr_javascript_

_repr_markdown_

_repr_latex_

_repr_mimebundle_

?

?

如果方法不存在,则使用标准 repr()。如果方法存在并返回 None,则将其视为不存在。通常,在显示对象时将调用所有可用的格式化程序,并且由 UI 选择要显示哪一个。给定的格式化程序通常不应根据其他可用格式更改其输出 - 这应该在不同的级别(例如 DisplayFormatter 或配置)进行处理。

_repr_*_ 方法应返回预期格式的数据,并且没有副作用。例如,_repr_html_ 应将 HTML 作为 str 返回,而 _repr_png_ 应将 PNG 数据作为 bytes 返回。

如果您希望通过自己的副作用控制显示,请使用 _ipython_display_()

例如

class Shout(object):
    def __init__(self, text):
        self.text = text

    def _repr_html_(self):
        return "<h1>" + self.text + "</h1>"

特殊方法

漂亮打印

要自定义对象的漂亮打印方式,请向类中添加 _repr_pretty_ 方法。该方法应接受一个漂亮打印机和一个布尔值,该布尔值指示打印机是否检测到循环。该方法应作用于打印机以生成自定义的漂亮输出。这里有一个示例

class MyObject(object):

    def _repr_pretty_(self, p, cycle):
        if cycle:
            p.text('MyObject(...)')
        else:
            p.text('MyObject[...]')

有关如何使用漂亮打印机的详细信息,请参阅 IPython.lib.pretty

更强大的方法
class MyObject
_repr_mimebundle_(include=None, exclude=None)

应返回一个由 mimetype 为键的多格式字典,或两个字典的元组:data、metadata(请参阅 分发元数据)。如果此方法返回内容,则会忽略其他 _repr_*_ 方法。该方法应采用关键字参数 includeexclude,但不要求遵守这些参数。

_ipython_display_()

将对象作为副作用显示;忽略返回值。如果定义了此方法,则会忽略所有其他显示方法。

元数据

我们经常希望为前端提供关于如何显示数据的指导。为了支持这一点,_repr_*_() 方法(除了 _repr_pretty_?)还可以返回一个 (data, metadata) 元组,其中 metadata 是一个包含任意键值对的字典,供前端解释。一个示例用例是 _repr_jpeg_(),它可以设置为返回一个 jpeg 图像和一个 {'height': 400, 'width': 600} 字典,以告知前端如何调整图像大小。

第三方类型的格式化程序

用户还可以为类型注册格式化程序,而无需修改类

from bar.baz import Foo

def foo_html(obj):
    return '<marquee>Foo object %s</marquee>' % obj.name

html_formatter = get_ipython().display_formatter.formatters['text/html']
html_formatter.for_type(Foo, foo_html)

# Or register a type without importing it - this does the same as above:
html_formatter.for_type_by_name('bar.baz', 'Foo', foo_html)

自定义异常跟踪

在极少数情况下,您可能希望在报告异常时显示自定义跟踪。为此,请使用 _render_traceback_(self) 方法定义自定义跟踪,该方法返回一个字符串列表,每个字符串对应跟踪中的一行。例如,ipyparallel 是 IPython 的并行计算框架,它执行此操作以显示来自多个引擎的错误。

请保守地使用此功能;通过替换默认跟踪,您可能会向用户隐藏重要信息。