IPython - 魔法命令



与标准 Python shell 相比,魔法命令或魔法函数是 IPython 提供的重要增强功能之一。这些魔法命令旨在解决使用 Python 进行数据分析中的常见问题。事实上,它们控制着 IPython 本身的行为。

魔法命令充当便捷函数,在这些函数中,Python 语法不是最自然的。它们对于在其工作流程中嵌入无效的 Python 语法很有用。

魔法命令的类型

魔法命令有两种类型:

  • 行魔法
  • 单元格魔法

行魔法

它们类似于命令行调用。它们以 % 字符开头。其余行是其参数,无需括号或引号传递。行魔法可以用作表达式,其返回值可以分配给变量。

单元格魔法

它们具有 %% 字符前缀。与行魔法函数不同,它们可以在其调用下方操作多行。事实上,它们可以对其接收的输入进行任意修改,这些输入甚至根本不必是有效的 Python 代码。它们将整个块作为单个字符串接收。

要了解更多关于魔法函数、内置魔法及其文档字符串的信息,请使用魔法命令。特定魔法函数的信息可以通过 %magicfunction? 命令获取。现在让我们描述一些内置的行和单元格魔法命令。

内置行魔法

%autocall [mode]

此魔法函数使函数无需使用括号即可自动调用。它接受三个可能的模式参数:0(关闭)、1(智能)为默认值2(始终开启)

Built-in line Magics

%automagic

如果设置为 1,则无需键入初始 % 即可调用魔法函数。在没有参数的情况下,它会切换打开/关闭。要停用,请设置为 0。

以下示例显示了一个魔法函数%pwd(显示当前工作目录)在 %automagic 设置为 1 时无需前导 % 即可被调用

%automagic

%cd

此行魔法更改当前目录。此命令会在您的 IPython 会话期间自动维护您访问的目录的内部列表,位于变量 _dh 中。您还可以执行“cd -<tab>”以方便地查看目录历史记录。

%cd

用法

可以使用以下方式使用 %cd 命令:

  • %cd <dir> - 将当前工作目录更改为 <dir>

  • %cd.. - 将当前目录更改为父目录

  • %cd - 更改为上次访问的目录。

%dhist

此魔法命令打印您在本会话中访问的所有目录。每次使用 %cd 命令时,此列表都会在_dh变量中更新。

%dhist

%edit

此魔法命令调用当前操作系统的默认文本编辑器(Windows 的记事本)来编辑 Python 脚本。脚本在编辑器关闭时执行。

%env

此魔法命令将列出所有环境变量。它还会读取特定变量的值或设置环境变量的值。

用法

可以使用以下方式使用 %cd 命令:

  • %env - 列出所有环境变量

  • %env var - 获取 var 的值

  • %env var val - 设置 var 的值

%env

%gui [GUINAME]

在没有参数的情况下使用时,此命令启用或禁用 IPython GUI 事件循环集成。使用 GUINAME 参数时,此魔法会将默认 GUI 工具包替换为指定的工具包。

序号 命令和描述
1

%gui wx

启用 wxPython 事件循环集成

2

%gui qt4|qt

启用 PyQt4 事件循环集成

3

%gui qt5

启用 PyQt5 事件循环集成

4

%gui gtk

启用 PyGTK 事件循环集成

5

%gui gtk3

启用 Gtk3 事件循环集成

6

%gui tk

启用 Tk 事件循环集成

7

%gui osx

启用 Cocoa 事件循环集成

8

(需要 %matplotlib 1.1)

9

%gui

禁用所有事件循环集成

%lsmagic

显示当前可用的所有魔法函数

%lsmagic

%matplotlib

此函数在 IPython 会话期间激活 matplotlib 交互支持。但是,它不会导入 matplotlib 库。matplotlib 默认 GUI 工具包是 TkAgg。但是您可以显式请求不同的 GUI 后端。您可以看到可用后端的列表,如下所示:

In [4]: %matplotlib --list
Available matplotlib backends: 
['osx', 'qt4', 'qt5', 'gtk3', 'notebook', 'wx', 'qt', 'nbagg','gtk', 'tk', 'inline']

此处显示的 IPython 会话使用qt工具包绘制正弦波:

%matplotlib

在使用 Jupyter notebook 时,%matplotlib inline 指令仅在浏览器中显示绘图输出。

%notebook

此函数将当前 IPython 历史记录转换为具有 ipynb 扩展名的 IPython 笔记本文件。前面示例中的输入单元格保存为 sine.ipynb

%notebook sine.ipynb

%pinfo

此函数类似于对象自省 ? 字符。要获取有关对象的信息,请使用以下命令:

%pinfo object

这与object??object同义。

%precision

此魔法函数将浮点结果限制为小数点后指定位数。

%precision

%pwd

此魔法函数返回当前工作目录。

%pwd

%pylab

此函数使用 matplotlib 和 numpy 库填充当前 IPython 会话。

%pylab

%recall

在没有参数的情况下执行时,此函数将执行上一个命令。

请注意,在%recall n中,前面的数字是输入单元格编号。因此,将调用第 n 个单元格中的命令。您可以通过使用诸如%recall 1-4之类的命令来调用单元格部分中的命令。当前输入单元格将使用调用的单元格填充,并且光标将闪烁,直到按下 Enter 键。

%recall

%run

此命令从 IPython shell 内部运行 Python 脚本。

%run

%time

此命令显示 IPython 环境执行 Python 表达式所需的时间。

%time

%timeit

此函数还显示 IPython 环境执行 Python 表达式所需的时间。Python 语句或表达式的执行时间使用 timeit 模块。此函数可以用作行魔法和单元格魔法,如下所述:

  • 行模式下,您可以计时单行。

  • 单元格模式下,第一行中的语句用作设置代码,并且单元格的主体将被计时。单元格主体可以访问在设置代码中创建的任何变量。

%who

此行魔法打印所有交互式变量,并进行一些最少的格式化。如果给出任何参数,则仅打印类型与其中一个匹配的变量。

%who

IPython 自定义行魔法函数

IPython 的核心库包含 register_line_magic 装饰器。使用此装饰器,用户定义的函数将转换为行魔法函数。

IPython Custom Line Magic function
广告