重要提示

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

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

介绍 IPython

你无需了解 Python 以外的任何知识即可开始使用 IPython – 只需像在标准 Python 提示符下一样键入命令即可。但 IPython 的功能远超标准提示符。这里描述了一些关键功能。有关更多信息,请查看 提示页面,或查看 IPython 食谱 中的示例。

如果你尚未完成,请参阅 如何安装 ipython

如果你从未使用过 Python,你可能需要查看 官方教程 或替代教程 深入 Python

从 shell 中发出 ipython 命令启动 IPython,你应该会看到以下内容

Python 3.6.0
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0.dev -- An enhanced Interactive Python. Type '?' for help.

In [1]:

与 Python REPL 不同,你会看到输入提示是 In [N]: 而不是 >>>。提示符中的数字 N 将在本教程中稍后使用,但通常不会影响计算。

你应该能够键入单行表达式并按 Enter 键对其进行求值。如果表达式不完整,IPython 会自动检测到这一点,并在你按 Enter 键时添加新行,而不是立即执行。

随意探索多行文本输入。与许多其他 REPL 不同,使用 IPython 时,你可以在编辑多行代码块时使用向上和向下箭头键。

以下是一个与 IPython REPL 进行较长时间交互的示例,我们通常将其称为 IPython 会话

In [1]: print('Hello IPython')
Hello IPython

In [2]: 21 * 2
Out[2]: 42

In [3]: def say_hello(name):
   ...:     print('Hello {name}'.format(name=name))
   ...:

我们现在不会深入细节,但你可能会注意到与标准 Python REPL 的一些不同之处。首先,在你键入时,你的代码应该以语法高亮显示。其次,你会看到一些结果会有一个 Out[N]: 提示,而另一些则没有。我们稍后会讲到这一点。

根据你键入的具体命令,你可能会意识到,有时 Enter 会添加一个新行,有时它会执行当前语句。IPython 会尝试猜测你在做什么,因此大多数情况下你无需关心。不过,如果 IPython 碰巧没有做正确的事情,你可以按顺序按下 EscEnter 来强制执行当前代码块。你还可以使用 Ctrl-o 在光标位置强制插入一个新行。

四个最有用的命令

每次启动 IPython 时,都会在横幅中向你显示四个最有用的命令及其简要说明

命令

说明

?

IPython 功能的介绍和概述。

%quickref

快速参考。

help

Python 自有的帮助系统。

object?

有关“对象”的详细信息,使用“object??”以获取更多详细信息。

Tab 补全

Tab 补全,特别是对于属性,是一种探索你正在处理的任何对象的结构的便捷方法。只需键入 object_name.<TAB> 即可查看对象的属性。除了 Python 对象和关键字外,Tab 补全还适用于文件和目录名称。

从 IPython 6.0 开始,如果安装了 jedi,IPython 也会尝试从 Jedi 中提取补全。这不仅允许检查当前存在的对象,还允许在不执行代码的情况下静态地推断补全。无需任何特殊操作即可实现此功能,只需对以下更复杂的表达式使用 Tab 补全

>>> data = ['Number of users', 123456]
... data[0].<tab>

IPython 和 Jedi 将能够推断出 data[0] 实际上是一个字符串,并且应该显示相关的补全,例如 upper()lower() 和其他字符串方法。你可以使用 Tab 键在补全之间循环,并且在补全高亮显示时,也会显示其类型。当补全的类型为函数时,补全器还会在高亮显示时显示函数的签名。

探索你的对象

键入 object_name? 将打印有关任何对象的所有详细信息,包括文档字符串、函数定义行(用于调用参数)和类的构造函数详细信息。要获取有关对象的特定信息,可以使用魔术命令 %pdoc%pdef%psource%pfile

魔术函数

IPython 有一组预定义的“魔术函数”,你可以使用命令行样式语法调用它们。魔术函数有两种类型:面向行的和面向单元格的。面向行的魔术函数% 字符为前缀,其工作方式与操作系统命令行调用非常相似:它们将行的其余部分作为参数,其中参数不带括号或引号。面向行的魔术函数可以返回结果,并且可以在赋值的右侧使用。面向单元格的魔术函数以双 %% 为前缀,它们是函数,不仅将行的其余部分作为参数,还将下面的行作为单独的参数。

魔术函数作为一种便捷函数非常有用,在其中 Python 语法不是最自然的语法,或者当人们希望在他们的工作流中嵌入无效的 Python 语法时,魔术函数也很有用。

以下示例展示了如何在行模式和单元格模式下调用内置 %timeit 魔术函数

In [1]: %timeit range(1000)
179 ns ± 2.66 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

In [2]: %%timeit x = range(10000)
...: max(x)
...:
264 µs ± 1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

内置魔术函数包括

您始终可以使用 % 前缀调用魔术命令,如果您在单独一行上调用行魔术命令,只要标识符未在您的命名空间中定义,您甚至可以省略该前缀

run thescript.py

您可以通过运行 %automagic 魔术命令来切换此行为。单元格魔术命令必须始终带有 %% 前缀。

可以通过调用 %magic 来获得魔术系统更详细的说明,有关任何魔术功能的更多详细信息,请调用 %somemagic? 来读取其文档字符串。要查看所有可用的魔术功能,请调用 %lsmagic

另请参阅

文档的 魔术命令系统 部分更深入地介绍了魔术命令的工作原理以及如何定义您自己的魔术命令,内置魔术命令 提供了内置魔术命令列表。

单元格魔术命令 示例笔记本

运行和编辑

%run 魔术命令允许您运行任何 Python 脚本,并将所有数据直接加载到交互式命名空间中。由于每次都从磁盘重新读取文件,因此您对文件所做的更改会立即反映出来(与导入的模块不同,导入的模块必须专门重新加载)。IPython 还包括 dreload,这是一个递归重新加载函数。

%run 具有特殊标记,用于对脚本执行计时 (-t),或在 Python 的 pdb 调试器 (-d) 或分析器 (-p) 的控制下运行脚本。

%edit 命令通过在现场调用您最喜欢的编辑器,提供了多行编辑的合理近似。IPython 将执行您在那里键入的代码,就像在交互式环境中键入一样。请注意,对于 %edit 而言,调用启动编辑器必须是一个阻塞调用。在 GUI 环境中,您的编辑器可能会有这样的选项。

调试

异常发生后,您可以调用 %debug 以跳转到 Python 调试器 (pdb) 并检查问题。或者,如果您调用 %pdb,IPython 将自动在任何未捕获的异常上启动调试器。您可以打印变量、查看代码、执行语句,甚至沿调用堆栈上下移动以追踪问题的真正来源。在许多情况下,这可能是开发和调试代码的高效方法,无需打印语句或外部调试工具。

您还可以通过调用 %run -d theprogram.py 从头开始逐步执行程序。

历史记录

IPython 存储您输入的命令及其产生的结果。您可以使用向上和向下箭头键轻松浏览以前的命令,或以更复杂的方式访问您的历史记录。

输入和输出历史记录保存在名为 InOut 的变量中,由提示符编号键入,例如 In[4]。输出历史记录中的最后三个对象也保存在名为 ______ 的变量中。

您可以使用 %history 魔术函数检查过去的输入和输出。以前会话的输入历史记录保存在数据库中,并且可以将 IPython 配置为保存输出历史记录。

其他几个魔术函数可以使用您的输入历史记录,包括 %edit%rerun%recall%macro%save%pastebin。您可以使用标准格式引用行

%pastebin 3 18-20 ~1/1-5

这将从当前会话中获取第 3 行和第 18 至 20 行,以及从上一个会话中获取第 1-5 行。

系统 shell 命令

要在系统 shell 中运行任何命令,只需在命令前加上 !,例如

!ping www.bbc.co.uk

您可以将输出捕获到 Python 列表中,例如:files = !ls。要将 Python 变量或表达式的值传递给系统命令,请在它们前面加上 $:!grep -rF $pattern ipython/* 或用 {大括号} 包裹。有关更多详细信息,请参阅 我们的 shell 部分

定义您自己的系统别名

经常使用的系统命令使用别名很方便。这样,您可以使用系统 shell 中习惯使用的相同命令,在 IPython 中无缝工作。IPython 带有一些预定义的别名和一个完整的系统,用于更改目录,既可以通过堆栈(参见 %pushd%popd%dhist)也可以通过直接 %cd。后者会保留已访问目录的历史记录,并允许您转到任何以前访问过的目录。

配置

可以通过 配置 调整 IPython 的大部分内容。要开始,请使用命令 ipython profile create 生成默认配置文件。这些文件将放置在 ~/.ipython/profile_default 中,并包含解释各种选项用途的注释。

配置文件允许您将 IPython 用于不同的任务,为每个任务保留单独的配置文件和历史记录。配置文件部分 中有更多详细信息。

启动文件

如果您希望在每次 IPython 会话开始时运行一些代码,最简单的方法是将 Python (.py) 或 IPython (.ipy) 脚本添加到您的 profile_default/startup/ 目录。此处的文件将在构建 IPython shell 时执行,在您指定的任何其他代码或脚本之前执行。这些文件将按其名称的顺序运行,因此您可以使用前缀控制顺序,例如 10-myimports.py