IPython - 魔术命令

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

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


魔术命令的类型

有两种魔术命令 −

  • Line magics
  • Cell magics

Line magics

它们类似于命令行调用。 它们以 % 字符开头。 该行的其余部分是不带括号或引号传递的参数。 Line magics 可以用作表达式,它们的返回值可以赋值给变量。

Cell Magics

它们有 %% 字符前缀。 与行魔术函数不同,它们可以在调用下方的多行上运行。 他们实际上可以对收到的输入进行任意修改,甚至根本不需要是有效的 Python 代码。 他们将整个块作为单个字符串接收。

要了解有关魔术函数、内置魔术及其文档字符串的更多信息,请使用 magic 命令。 通过%magicfunction? 命令获取特定魔术函数的信息。 现在让我们描述一些内置的 line 和 cell 魔术命令。

内置的 Line magics

%autocall [mode]

这个神奇的函数使函数可以自动调用而无需使用括号。 它采用三个可能的模式参数:0(关闭)、1(智能)是默认值2(始终开启)

内置 line Magics

%automagic

如果设置为 1,魔术函数无需键入初始 % 即可调用。如果没有参数,它会打开/关闭。 要停用,请设置为 0。

以下示例显示了当 %automagic 设置为 1 时调用的魔术函数 %pwd(显示当前工作目录)没有前导 %

%automagic

%cd

这行魔术改变了当前目录。 此命令会在变量 _dh 中自动维护您在 IPython 会话期间访问的目录的内部列表。 您也可以执行 'cd -<tab>' 以方便地查看目录历史记录。

%cd

用法

%cd 命令可以通过以下方式使用 −

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

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

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

%dhist

这个魔术命令打印出你在当前会话中访问过的所有目录。 每次使用 %cd 命令时,都会在 _dh 变量中更新此列表。

%dhist

%edit

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

%env

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

Usage

%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 内联指令仅在浏览器中显示绘图输出。

%notebook

此函数将当前的 IPython 历史记录转换为扩展名为 ipynb 的 IPython Notebook 文件。 前面例子中的输入单元格保存为 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 之类的命令来调用单元格部分中的命令。 当前输入的单元格被调用的单元格填充,光标闪烁直到按下回车键。

%recall

%run

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

%run

%time

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

%time

%timeit

此函数还显示 IPython 环境执行 Python 表达式所需的时间。 Python 语句或表达式的时间执行使用 timeit 模块。 如此处所述,此功能既可以用作线条魔术也可以用作单元魔术 −

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

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

%who

这行魔术打印所有交互变量,并带有一些最小的格式。 如果给出任何参数,则只会打印类型与其中之一匹配的变量。

%who

IPython 自定义行魔术函数

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

自定义行魔术函数