重要提示
此文档涵盖 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 碰巧没有做正确的事情,你可以按顺序按下 Esc 和 Enter 来强制执行当前代码块。你还可以使用 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)
内置魔术函数包括
影响 Shell 的功能:
%colors
、%xmode
、%automagic
等。其他功能,如
%reset
、%timeit
、%%writefile
、%load
或%paste
。
您始终可以使用 %
前缀调用魔术命令,如果您在单独一行上调用行魔术命令,只要标识符未在您的命名空间中定义,您甚至可以省略该前缀
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 存储您输入的命令及其产生的结果。您可以使用向上和向下箭头键轻松浏览以前的命令,或以更复杂的方式访问您的历史记录。
输入和输出历史记录保存在名为 In
和 Out
的变量中,由提示符编号键入,例如 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
。