重要
本文档涵盖 IPython 6.0 及更高版本。从 6.0 版本开始,IPython 不再支持与低于 3.3 的 Python 版本兼容,包括所有版本的 Python 2.7。
如果您正在寻找与 Python 2.7 兼容的 IPython 版本,请使用 IPython 5.x LTS 版本并参考其文档(LTS 是长期支持版本)。
内置魔术命令¶
注意
对于 Jupyter 用户:魔术是特定于 IPython 内核并由 IPython 内核提供的。内核上是否提供魔术由内核开发者逐个内核决定。为了正常工作,魔术必须使用在底层语言中无效的语法元素。例如,IPython 内核使用 %
语法元素表示魔术,因为 %
在 Python 中不是有效的单目运算符。但是,%
在其他语言中可能具有含义。
以下是 IPython 附带的所有可用魔术函数的文档字符串自动生成的帮助。
您可以在 IPython 中创建和注册您自己的魔术。您可以在 PyPI 上找到许多用户定义的魔术。随时发布您自己的魔术,并使用 Framework :: IPython
trove 分类器。
行魔术¶
- %alias¶
为系统命令定义别名。
‘%alias alias_name cmd’将‘alias_name’定义为‘cmd’的别名
然后,键入‘alias_name params’将执行系统命令‘cmd params’(来自您的底层操作系统)。
别名的优先级低于魔术函数和 Python 普通变量,因此如果‘foo’既是 Python 变量又是别名,则别名无法执行,直到‘del foo’删除 Python 变量。
您可以在别名定义中使用 %l 说明符来表示调用别名时的整行。例如
In [2]: alias bracket echo "Input in brackets: <%l>" In [3]: bracket hello world Input in brackets: <hello world>
您还可以使用 %s 说明符(每个参数一个)定义带参数的别名
In [1]: alias parts echo first %s second %s In [2]: %parts A B first A second B In [3]: %parts A Incorrect number of arguments: 2 expected. parts is an alias to: 'echo first %s second %s'
请注意,%l 和 %s 互斥。您只能在别名中使用其中之一。
别名扩展 Python 变量,就像使用 ! 或 !! 进行系统调用一样:所有以‘$’为前缀的表达式都将扩展。有关语义规则的详细信息,请参阅 PEP-215:https://peps.pythonlang.cn/pep-0215/。这是 IPython 用于变量扩展的库。如果您想访问真正的 shell 变量,则需要额外的 $ 来防止 IPython 扩展它
In [6]: alias show echo In [7]: PATH='A Python string' In [8]: show $PATH A Python string In [9]: show $$PATH /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
您可以使用别名设施来访问所有 $PATH。请参阅 %rehashx 函数,它会自动为 $PATH 的内容创建别名。
如果在没有参数的情况下调用,%alias 会打印系统当前的别名表。对于 posix 系统,默认别名是“cat”、“cp”、“mv”、“rm”、“rmdir”和“mkdir”,还会添加其他特定于平台的别名。对于基于 Windows 的系统,默认别名是“copy”、“ddir”、“echo”、“ls”、“ldir”、“mkdir”、“ren”和“rmdir”。
您可以在末尾添加问号来查看别名的定义
In [1]: cat? Repr: <alias cat for 'cat'>
- %alias_magic¶
%alias_magic [-l] [-c] [-p PARAMS] name target
为现有的行或单元格 magic 创建别名。
示例
In [1]: %alias_magic t timeit Created `%t` as an alias for `%timeit`. Created `%%t` as an alias for `%%timeit`. In [2]: %t -n1 pass 107 ns ± 43.6 ns per loop (mean ± std. dev. of 7 runs, 1 loop each) In [3]: %%t -n1 ...: pass ...: 107 ns ± 58.3 ns per loop (mean ± std. dev. of 7 runs, 1 loop each) In [4]: %alias_magic --cell whereami pwd UsageError: Cell magic function `%%pwd` not found. In [5]: %alias_magic --line whereami pwd Created `%whereami` as an alias for `%pwd`. In [6]: %whereami Out[6]: '/home/testuser' In [7]: %alias_magic h history -p "-l 30" --line Created `%h` as an alias for `%history -l 30`.
- 位置参数
name 要创建的 magic 的名称。target 现有行或单元格 magic 的名称。
- 选项
- -l, --line
创建行 magic 别名。
- -c, --cell
创建单元格 magic 别名。
- -p PARAMS, --params PARAMS
传递给 magic 函数的参数。
- %autoawait¶
允许更改 autoawait 选项的状态。
这允许您设置特定的异步代码运行器。
如果未传递任何值,则打印当前使用的异步集成以及是否已激活。
它可以采用按以下顺序评估的多个值
False/false/off 停用 autoawait 集成
True/true/on 使用配置的默认循环激活 autoawait 集成
asyncio/curio/trio 激活 autoawait 集成并使用与所述库的集成。
sync
启用伪同步集成(主要用于IPython.embed()
,它不会使用真正的事件循环运行 IPython,并停用运行异步代码。使用伪同步循环启用异步代码的行为未定义,并可能导致 IPython 崩溃。
如果传递的参数与上述任何参数都不匹配,并且是 Python 标识符,则从用户命名空间中获取所述对象并将其设置为运行器,并激活 autoawait。
如果对象是完全限定的对象名称,则尝试导入它并将其设置为运行器,并激活 autoawait。
autoawait 的确切行为是实验性的,并且可能会在 IPython 和 Python 的不同版本中发生变化。
- %autocall¶
无需键入括号即可调用函数。
用法
%autocall [mode]
模式可以是以下之一:0->Off,1->Smart,2->Full。如果未给出,则该值将切换为开和关(记住前一个状态)。
更详细地说,这些值表示
0 -> 完全禁用
1 -> 处于活动状态,但如果该行没有参数,则不应用。
在此模式下,您将获得
In [1]: callable Out[1]: <built-in function callable> In [2]: callable 'hello' ------> callable('hello') Out[2]: False
2 -> 始终处于活动状态。即使没有参数,也会调用可调用对象
In [2]: float ------> float() Out[2]: 0.0
请注意,即使关闭了自动调用,您仍然可以在行开头使用“/”将命令行上的第一个参数视为函数并向其添加括号
In [8]: /str 43 ------> str(43) Out[8]: '43'
# 全随机(用于自动测试)
- %automagic¶
无需键入初始 % 即可调用 magic 函数。
不带参数时切换开/关(关闭时,您必须将其称为 %automagic)。带参数时,它会设置该值,您可以使用以下任何一个(不区分大小写)
on、1、True:激活
off、0、False:停用。
请注意,magic 函数的优先级最低,因此如果有一个变量的名称与 magic fn 的名称冲突,则 automagic 将不适用于该函数(您将获得变量)。但是,如果您删除变量(del var),先前被隐藏的 magic 函数将再次对 automagic 可见。
- %bookmark¶
管理 IPython 的书签系统。
%bookmark <name> - 将书签设置为当前目录 %bookmark <name> <dir> - 将书签设置为 <dir> %bookmark -l - 列出所有书签 %bookmark -d <name> - 删除书签 %bookmark -r - 删除所有书签
稍后您可以使用以下方法访问书签文件夹
%cd -b <name>
或者,如果不存在名为 <name> 的目录,并且定义了这样的书签,则只需“%cd <name>”即可。
您的书签会持续存在于 IPython 会话中,但它们与每个配置文件相关联。
- %cd¶
更改当前工作目录。
此命令会自动维护一个内部列表,其中包含您在 IPython 会话期间访问的目录,位于变量
_dh
中。命令%dhist
以漂亮的格式显示此历史记录。您还可以执行cd -<tab>
以方便地查看目录历史记录。用法cd 'dir'
:更改为目录“dir”。cd -
:更改为上次访问的目录。cd -<n>
:更改为目录历史记录中的第 n 个目录。cd --foo
:更改为与历史记录中“foo”匹配的目录cd -b <bookmark_name>
:跳转到由 %bookmark 设置的书签在
cd -b
后按 Tab 键,您可以自动完成书签名称。
注意
cd <bookmark_name>
足以满足要求,前提是没有目录<bookmark_name>
,但存在同名书签。选项
- -q
保持安静。在执行 cd 命令后,不要打印工作目录。默认情况下,IPython 的 cd 命令会打印此目录,因为默认提示不会显示路径信息。
注意
请注意,
!cd
不适用于此目的,因为运行!command
的 shell 会在执行“command”后立即被丢弃。示例
In [10]: cd parent/child /home/tsuser/parent/child
- %code_wrap¶
%code_wrap [--remove] [--list] [--list-all] [name]
简单的 magic,用于快速为所有 IPython 的未来输入定义一个代码转换器。
__code__
和__ret__
是特殊变量,分别表示要运行的代码和__code__
的最后一个表达式的值。示例
In [1]: %%code_wrap before_after ...: print('before') ...: __code__ ...: print('after') ...: __ret__ ...: In [2]: 1 before after Out[2]: 1 In [3]: %code_wrap --list before before_after after In [4]: %code_wrap --list-all before before_after : print('before') __code__ print('after') __ret__ after In [5]: %code_wrap --remove before_after before after
- 位置参数
name
- 选项
- --remove
删除当前转换器
- --list
列出现有转换器名称
- --list-all
列出现有转换器名称和代码模板
- %colors¶
切换提示、信息系统和异常处理程序的配色方案。
当前实现的方案:NoColor、Linux、LightBG。
配色方案名称不区分大小写。
示例
要获得一个纯黑白终端
%colors nocolor
- %conda¶
在当前内核中运行 conda 包管理器。
- 用法
%conda install [pkgs]
- %config¶
配置 IPython
%config Class[.trait=value]
此 magic 公开了 IPython 配置系统的大部分内容。任何可配置类都应该能够通过以下简单行进行配置
%config Class.trait=value
其中
value
将在用户的命名空间中解析,如果它是一个表达式或变量名。示例
要查看可用于配置的类,请不要传递任何参数
In [1]: %config Available objects for config: AliasManager DisplayFormatter HistoryManager IPCompleter LoggingMagics MagicsManager OSMagics PrefilterManager ScriptMagics TerminalInteractiveShell
要查看给定类上可配置的内容,只需传递类名
In [2]: %config LoggingMagics LoggingMagics(Magics) options LoggingMagics.quiet=<Bool> Suppress output of log state when logging is enabled Current: False
但真正的用途在于设置值
In [3]: %config LoggingMagics.quiet = True
并且这些值从 user_ns 中读取,如果它们是变量
In [4]: feeling_quiet=False In [5]: %config LoggingMagics.quiet = feeling_quiet
- %debug¶
%debug [--breakpoint FILE:LINE] [statement ...]
激活交互式调试器。
此魔术命令支持两种激活调试器的方法。一种是在执行代码之前激活调试器。这样,您可以设置一个断点,从该点开始逐步执行代码。您可以通过提供要执行的语句(以及可选的断点)来使用此模式。
另一种方法是在事后模式下激活调试器。您可以通过简单运行 %debug(没有任何参数)来激活此模式。如果刚刚发生异常,这将允许您交互式检查其堆栈帧。请注意,这将始终仅对发生的最后一个回溯起作用,因此您必须在要检查的异常触发后立即调用它,因为如果发生另一个异常,它将覆盖前一个异常。
如果您希望 IPython 在每次异常时自动执行此操作,请参阅 %pdb 魔术以了解更多详细信息。
7.3 版本中已更改: 在运行代码时,不再展开用户变量,魔术行始终保持不变。
- 位置参数
- statement 在调试器中运行的代码。您可以在单元格中省略此代码
魔术模式。
- 选项
- --breakpoint <FILE:LINE>, -b <FILE:LINE>
在 FILE 中的 LINE 处设置断点。
- %dhist¶
打印您访问过的目录的历史记录。
%dhist -> 打印完整历史记录%dhist n -> 仅打印最后 n 个条目%dhist n1 n2 -> 打印 n1 和 n2 之间的条目(不包括 n2)
此历史记录由 %cd 命令自动维护,并始终作为全局列表变量 _dh 提供。您可以使用 %cd -<n> 转到目录编号 <n>。
请注意,大多数情况下,您应该通过输入 cd -<TAB> 来查看目录历史记录。
- %dirs¶
返回当前目录堆栈。
- %doctest_mode¶
切换 doctest 模式的开启和关闭。
此模式旨在使 IPython 在提示符、异常和输出的外观方面尽可能像一个普通的 Python shell。这使得将会话的部分内容复制并粘贴到 doctest 中变得容易。它通过以下方式实现此目的
将提示符更改为经典的
>>>
。将异常报告模式更改为“普通”。
禁用输出的漂亮打印。
请注意,IPython 还支持粘贴带有前导“>>>”和“...”提示符的代码片段。这意味着您可以从文件或文档字符串中粘贴 doctest(即使它们有前导空格),并且代码将正确执行。然后,您可以使用“%history -t”查看转换后的历史记录;这将在删除所有前导提示符和空格后为您提供输入,可以将其粘贴回编辑器中。
使用这些功能,您可以在需要进行 doctest 测试和更改时轻松切换到此模式,而无需离开现有的 IPython 会话。
- %edit¶
调出一个编辑器并执行生成的代码。
- 用法
%edit [options] [args]
%edit 运行 IPython 的编辑器挂钩。此挂钩的默认版本设置为调用由 $EDITOR 环境变量指定的编辑器。如果找不到此变量,它将在 Linux/Unix 下默认为 vi,在 Windows 下默认为记事本。有关如何更改编辑器挂钩,请参阅此文档字符串的末尾。
您还可以通过配置文件中的
TerminalInteractiveShell.editor
选项设置此编辑器的值。如果您希望使用与 IPython 中的典型默认值不同的编辑器(以及通常不设置环境变量的 Windows 用户),这将很有用。此命令允许您在 IPython 会话中方便地编辑多行代码。
如果在没有参数的情况下调用,%edit 将使用临时文件打开一个空编辑器,并在您关闭它时执行此文件的内容(别忘了保存它!)。
选项
-n <number>: 在指定行号处打开编辑器。默认情况下,IPython 编辑器挂钩使用 unix 语法“editor +N filename”,但如果您最喜欢的编辑器支持具有不同语法的行号规范,您可以通过提供您自己修改的挂钩来配置此项。
-p: 这将使用与上次使用时相同的数据调用编辑器,无论在(您当前的会话中)多久之前使用过它。
-r: 使用“原始”输入。此选项仅适用于从用户历史记录中获取的输入。默认情况下,使用“已处理”历史记录,以便将魔术加载到其已转换为有效 Python 的版本中。如果给出了此选项,则将使用作为命令行键入的原始输入。当您退出编辑器时,它将由 IPython 自己的处理器执行。
-x: 在退出时不要立即执行已编辑的代码。如果您正在编辑需要使用命令行参数调用的程序,这主要很有用,然后您可以使用 %run 执行此操作。
参数
如果给出了参数,则存在以下可能性
如果参数是文件名,IPython 将将其加载到编辑器中。当您退出时,它将使用 execfile() 执行其内容,将文件中的任何代码加载到您的交互式命名空间中。
参数是输入历史记录的范围,例如“7 ~1/4-6”。语法与 %history 魔术中的语法相同。
如果参数是字符串变量,则其内容将加载到编辑器中。因此,您可以编辑包含 python 代码的任何字符串(包括先前编辑的结果)。
如果参数是对象(字符串除外)的名称,IPython 将尝试找到定义它的文件,并在其定义的位置打开编辑器。您可以使用
%edit function
在“function”定义的确切位置加载编辑器,对其进行编辑,并自动执行该文件。如果对象是宏(有关详细信息,请参见 %macro),则这将使用包含宏数据的临时文件打开您指定的编辑器。退出后,宏将使用文件的内容重新加载。
注意:仅在 Unix 下支持在确切行处打开,并且某些编辑器(如 kedit 和 Gnome 2.8 之前的 gedit)不理解此功能所需的“+NUMBER”参数。像 (X)Emacs、vi、jed、pico 和 joe 这样的优秀编辑器都可以。
在执行您的代码后,%edit 将输出您在编辑器中键入的代码(除非它是现有文件)。通过这种方式,您可以通过 _<NUMBER> 或 Out[<NUMBER>] 在 %edit 的进一步调用中将代码重新加载为变量,其中 <NUMBER> 是输出的提示号。
请注意,%edit 也可通过别名 %ed 获得。
这是一个在编辑器中创建简单函数然后修改它的示例。首先,启动编辑器
In [1]: edit Editing... done. Executing edited code... Out[1]: 'def foo():\n print("foo() was defined in an editing session")\n'
然后我们可以调用函数 foo()
In [2]: foo() foo() was defined in an editing session
现在我们编辑 foo。IPython 自动使用 foo() 之前定义的(临时)文件加载编辑器
In [3]: edit foo Editing... done. Executing edited code...
如果我们再次调用 foo(),我们将获得修改后的版本
In [4]: foo() foo() has now been changed!
以下是如何连续多次编辑代码片段的示例。首先我们调用编辑器
In [5]: edit Editing... done. Executing edited code... hello Out[5]: "print('hello')\n"
现在我们用之前的输出(存储在 _ 中)再次调用它
In [6]: edit _ Editing... done. Executing edited code... hello world Out[6]: "print('hello world')\n"
现在我们用输出 #8(存储在 _8 中,也作为 Out[8])调用它
In [7]: edit _8 Editing... done. Executing edited code... hello again Out[7]: "print('hello again')\n"
更改默认编辑器钩子
如果你希望编写自己的编辑器钩子,你可以将其放入一个配置文件中,并在启动时加载该文件。默认钩子在 IPython.core.hooks 模块中定义,你可以将其用作进一步修改的起始示例。该文件还包含有关在你定义新钩子后如何设置新钩子以供使用的常规说明。
- %env¶
获取、设置或列出环境变量。
用法
%env
:列出所有环境变量/值
%env var
:获取 var 的值
%env var val
:设置 var 的值
%env var=val
:设置 var 的值
%env var=$val
:设置 var 的值,如果可能,使用 Python 扩展
- %gui¶
启用或禁用 IPython GUI 事件循环集成。
%gui [GUINAME]
此 magic 替换了使用(pylab/wthread/等)命令行标志激活的 IPython 的线程 shell。现在可以在运行时启用 GUI 工具包,并且键盘中断应该可以正常工作。支持以下工具包:wxPython、PyQt4、PyGTK、Tk 和 Cocoa(OSX)
%gui wx # enable wxPython event loop integration %gui qt # enable PyQt/PySide event loop integration # with the latest version available. %gui qt6 # enable PyQt6/PySide6 event loop integration %gui qt5 # enable PyQt5/PySide2 event loop integration %gui gtk # enable PyGTK event loop integration %gui gtk3 # enable Gtk3 event loop integration %gui gtk4 # enable Gtk4 event loop integration %gui tk # enable Tk event loop integration %gui osx # enable Cocoa event loop integration # (requires %matplotlib 1.1) %gui # disable all event loop integration
警告:在调用了其中任何一个之后,你可以简单地创建一个应用程序对象,但不要自己启动事件循环,因为我们已经处理了它。
- %history¶
%history [-n] [-o] [-p] [-t] [-f FILENAME] [-g [PATTERN ...]] [-l [LIMIT]] [-u] [range ...]
打印输入历史记录(_i<n> 变量),最近的放在最后。
默认情况下,输入历史记录在没有行号的情况下打印,因此可以直接粘贴到编辑器中。使用 -n 显示它们。
默认情况下,将显示当前会话中的所有输入历史记录。可以使用以下语法指示历史记录的范围
4
第 4 行,当前会话
4-6
第 4-6 行,当前会话
243/1-5
第 1-5 行,会话 243
~2/7
第 7 行,当前之前会话 2
~8/1-~6/5
从 8 个会话前的第一行到 6 个会话前的第五行。
可以输入多个范围,用空格分隔
%macro、%save、%edit、%rerun 使用相同的语法
示例
In [6]: %history -n 4-6 4:a = 12 5:print(a**2) 6:%history -n 4-6
- 位置参数
范围
- 选项
- -n
为每个输入打印行号。此功能仅在使用带编号的提示符时可用。
- -o
还为每个输入打印输出。
- -p
在每个输入前打印经典的“>>>”python 提示符。这对于制作文档非常有用,并且与 -o 结合使用,可以生成可用于 doctest 的输出。
- -t
打印“翻译”后的历史记录,如 IPython 所理解的那样。IPython 会过滤你的输入,并在执行之前将其全部转换为有效的 Python 源代码(例如,将魔术或别名转换为函数调用)。使用此选项,你将看到本机历史记录,而不是用户输入的版本:“%cd /”将被视为“get_ipython().run_line_magic(“cd”, “/”)”,而不是“%cd /”。
- -f FILENAME
FILENAME:不将输出打印到屏幕,而是将其重定向到给定的文件。该文件总是被覆盖,但当它可以时,IPython 会首先要求确认。特别是,从 IPython Notebook 界面运行命令“history -f FILENAME”将替换 FILENAME,即使它已经存在也不会确认。
- -g <[PATTERN …]>
将参数视为 glob 模式,在(完整)历史记录中搜索。这包括已保存的历史记录(几乎所有曾经编写的命令)。该模式可能包含“?”以匹配一个未知字符和“*”以匹配任意数量的未知字符。使用“%hist -g”显示完整的已保存历史记录(可能很长)。
- -l <[LIMIT]>
从所有会话中获取最后 n 行。将 n 指定为单个参数,或默认值为最后 10 行。
- -u
使用
-g
搜索历史记录时,仅显示唯一历史记录。
- %killbgscripts¶
终止 %%script 及其系列启动的所有 BG 进程。
- %load¶
将代码加载到当前前端。
- 用法
%load [options] source
其中 source 可以是文件名、URL、输入历史记录范围、宏或用户命名空间中的元素
如果没有给出参数,则加载此会话的历史记录直到此点。
选项
-r <lines>: 指定要从源加载的行或行范围。范围可以指定为 x-y (x..y) 或采用 python 样式 x:y (x..(y-1))。x 和 y 两个限制都可以留空(分别表示文件开头和结尾)。
-s <symbols>: 指定要从 python 源加载的函数或类。
-y : 在加载超过 200 000 个字符的源之前,不要要求确认。
-n : 在搜索源代码时包括用户的命名空间。
此魔术命令可以采用本地文件名、URL、历史记录范围(请参见 %history)或宏作为参数,它将在加载超过 200 000 个字符的源之前提示确认,除非传递了 -y 标志或前端不支持 raw_input
%load %load myscript.py %load 7-27 %load myMacro %load http://www.example.com/myscript.py %load -r 5-10 myscript.py %load -r 10-20,30,40: foo.py %load -s MyClass,wonder_function myscript.py %load -n MyClass %load -n my_module.wonder_function
- %load_ext¶
按其模块名称加载 IPython 扩展。
- %loadpy¶
%load
的别名%loadpy
变得更加灵活,并且取消了.py
扩展的要求。因此,它已被简单地重命名为 %load。有关更多信息,请参阅%load
的文档字符串。
- %logoff¶
暂时停止记录。
您必须先启动记录。
- %logon¶
重新启动记录。
此函数用于重新启动您使用 %logoff 暂时停止的记录。要首次启动记录,您必须使用 %logstart 函数,该函数允许您指定可选的日志文件名。
- %logstart¶
在会话中的任何位置启动记录。
%logstart [-o|-r|-t|-q] [log_name [log_mode]]
如果没有给出名称,则默认为当前目录中名为“ipython_log.py”的文件,处于“轮换”模式(见下文)。
‘%logstart name’ 将内容保存到 ‘backup’ 模式的 ‘name’ 文件中。它将保存到此为止的历史记录,然后继续记录。
%logstart 接受第二个可选参数:记录模式。它可以是以下之一(注意模式没有加引号)
- append
在任何现有文件的末尾继续记录。
- backup
将任何现有文件重命名为 name~ 并启动 name。
- global
追加到主目录中的单个日志文件中。
- over
覆盖任何现有日志。
- rotate
创建轮换日志:name.1~, name.2~ 等。
选项
- -o
还记录 IPython 的输出。在此模式下,所有生成 Out[NN] 提示符的命令都会记录到日志文件中,紧跟其对应的输入行之后。输出行始终以 ‘#[Out]# ‘ 标记开头,以便日志保持有效的 Python 代码。
由于此标记始终相同,因此仅过滤日志中的输出非常容易,例如使用简单的 awk 调用
awk -F'#\[Out\]# ' '{if($2) {print $2}}' ipython_log.py
- -r
记录“原始”输入。通常,IPython 的日志包含已处理的输入,以便用户行以最终形式记录,转换为有效的 Python。例如,%Exit 记录为 _ip.magic(“Exit”)。如果给出了 -r 标志,则所有输入都将原样记录,不应用任何转换。
- -t
在记录的每个输入行之前放置时间戳(这些放在注释中)。
- -q
调用记录时禁止输出 logstate 消息
- %logstate¶
打印日志系统的状态。
- %logstop¶
完全停止记录并关闭日志文件。
为了重新开始记录,需要进行新的 %logstart 调用,可能(但不一定)使用新的文件名、模式和其他选项。
- %lsmagic¶
列出当前可用的魔术函数。
- %macro¶
定义宏以供将来重新执行。它接受历史记录、文件名或字符串对象的范围。
- 用法
%macro [选项] 名称 n1-n2 n3-n4 … n5 .. n6 …
选项
-r:使用“原始”输入。默认情况下,使用“已处理”历史记录,以便魔术以其转换为有效 Python 的转换版本加载。如果给出了此选项,则使用命令行中键入的原始输入。
-q:静默宏定义。默认情况下,会打印一行标签以指示已创建宏,然后打印宏的内容。如果给出了此选项,则在创建宏后不会产生打印输出。
这将定义一个名为
name
的全局变量,它是一个字符串,由将您在输入历史记录中指定的切片和行(n1、n2 等上面的数字)连接到一个字符串中组成。此变量充当一个自动函数,重新执行这些行,就像您键入它们一样。您只需在提示符处键入“name”,代码就会执行。%history 中描述了指示输入范围的语法。
注意:作为“隐藏”功能,您还可以使用传统的 python 切片表示法,其中 N:M 表示数字 N 到 M-1。
例如,如果您的历史记录包含(使用 %hist -n 打印)
44: x=1 45: y=3 46: z=x+y 47: print(x) 48: a=5 49: print('x',x,'y',y)
您可以使用以下命令创建包含第 44 行到第 47 行(包括)和第 49 行的宏 my_macro:
In [55]: %macro my_macro 44-47 49
现在,键入
my_macro
(不带引号)将在一次传递中重新执行所有这些代码。您不必按顺序给出行号,任何给定的行号都可以出现多次。您可以按任何顺序组装输入历史记录中任何行的宏。
宏是一个简单的对象,它将值保存在一个属性中,但 IPython 的显示系统会检查宏并在您键入其名称时将它们作为代码执行,而不是打印它们。
您可以通过以下方式显式打印宏的内容来查看宏的内容
print(macro_name)
- %magic¶
打印有关 magic 函数系统的信息。
支持的格式:-latex、-brief、-rest
- %mamba¶
在当前内核中运行 mamba 包管理器。
- 用法
%mamba install [pkgs]
- %matplotlib¶
%matplotlib [-l] [gui]
设置 matplotlib 以交互方式工作。
此函数允许你在 IPython 会话期间的任何时间激活 matplotlib 交互支持。它不会将任何内容导入交互式命名空间。
如果你在 IPython Notebook 中使用内嵌 matplotlib 后端,则可以使用以下内容设置启用了哪些图形格式
In [1]: from matplotlib_inline.backend_inline import set_matplotlib_formats In [2]: set_matplotlib_formats('pdf', 'svg')
内嵌图形的默认设置将
bbox_inches
设置为“tight”。这可能导致显示的图像与使用savefig
创建的相同图像之间存在差异。可以使用%config
magic 禁用此行为In [3]: %config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
此外,请参阅
matplotlib_inline.backend_inline.set_matplotlib_formats
和matplotlib_inline.backend_inline.set_matplotlib_close
的文档字符串,以获取有关更改内嵌后端其他行为的更多信息。示例
为与 IPython Notebook 一起使用启用内嵌后端
In [1]: %matplotlib inline
在这种情况下,matplotlib 默认值为 TkAgg
In [2]: %matplotlib Using matplotlib backend: TkAgg
但你可以明确请求不同的 GUI 后端
In [3]: %matplotlib qt
你可以使用 -l/–list 选项列出可用的后端
In [4]: %matplotlib --list Available matplotlib backends: ['osx', 'qt4', 'qt5', 'gtk3', 'gtk4', 'notebook', 'wx', 'qt', 'nbagg', 'gtk', 'tk', 'inline']
- 位置参数
- gui 要使用的 matplotlib 后端名称,例如“qt”或“widget”。
如果给出,则使用相应的 matplotlib 后端,否则将使用 matplotlib 的默认值(你可以在 matplotlib 配置文件中设置)。
- 选项
- -l, --list
显示可用的 matplotlib 后端
- %micromamba¶
在当前内核中运行 conda 包管理器。
- 用法
%micromamba install [pkgs]
- %notebook¶
%notebook filename
导出和转换 IPython 笔记本。
此函数可以将当前 IPython 历史记录导出到笔记本文件中。例如,要将历史记录导出到“foo.ipynb”,请执行“%notebook foo.ipynb”。
- 位置参数
filename 笔记本名称或文件名
- %page¶
漂亮地打印对象并通过分页器显示它。
%page [options] OBJECT
如果没有给出对象,则使用 _(最后一个输出)。
选项
-r:分页 str(object),不要对其进行漂亮打印。
- %pastebin¶
将代码上传到 dpaste.com,返回 URL。
- 用法
%pastebin [-d “Custom description”][-e 24] 1-7
参数可以是输入历史记录范围、文件名或字符串或宏的名称。
如果没有给出参数,则上传此会话到此为止的历史记录。
选项
- -d:传递自定义说明。默认情况下会说
“从 IPython 粘贴”。
- -e:传递链接失效的天数。
默认值为 7 天。
- %pdb¶
控制 pdb 交互式调试器的自动调用。
作为“%pdb on”、“%pdb 1”、“%pdb off”或“%pdb 0”调用。如果在没有参数的情况下调用,它将作为切换开关。
当触发异常时,IPython 可选择在打印回溯后调用交互式 pdb 调试器。%pdb 打开和关闭此功能。
此功能的初始状态在配置文件中设置(选项为
InteractiveShell.pdb
)。如果您只想在异常触发后激活调试器,而不必键入“%pdb on”并重新运行代码,则可以使用 %debug 魔术。
- %pdef¶
打印任何可调用对象的调用签名。
如果对象是类,则打印构造函数信息。
示例
In [3]: %pdef urllib.urlopen urllib.urlopen(url, data=None, proxies=None)
- %pdoc¶
打印对象的文档字符串。
如果给定的对象是类,它将同时打印类和构造函数文档字符串。
- %pfile¶
打印(或通过分页器运行)定义对象的所在文件。
文件在对象定义开始的行打开。如果设置了环境变量 PAGER,IPython 将遵守该变量,否则将尽力以方便的形式打印文件。
如果给定的参数不是当前定义的对象,IPython 将尝试将其解释为文件名(如果需要,自动添加 .py 扩展名)。因此,您可以将 %pfile 用作语法高亮代码查看器。
- %pinfo¶
提供有关对象的详细信息。
“%pinfo object”只是 object? 或 ?object 的同义词。
- %pinfo2¶
提供有关对象的更多详细信息。
“%pinfo2 object”只是 object?? 或 ??object 的同义词。
- %pip¶
在当前内核中运行 pip 包管理器。
- 用法
%pip install [pkgs]
- %popd¶
更改为从堆栈顶部弹出的目录。
- %pprint¶
打开/关闭漂亮打印。
- %precision¶
设置漂亮打印的浮点精度。
可以设置整数精度或格式字符串。
如果已导入 numpy 且精度为整数,则还将通过
numpy.set_printoptions
设置 numpy 显示精度。如果未给出参数,则将恢复默认值。
示例
In [1]: from math import pi In [2]: %precision 3 Out[2]: '%.3f' In [3]: pi Out[3]: 3.142 In [4]: %precision %i Out[4]: '%i' In [5]: pi Out[5]: 3 In [6]: %precision %e Out[6]: '%e' In [7]: pi**10 Out[7]: 9.364805e+04 In [8]: %precision Out[8]: '%r' In [9]: pi**10 Out[9]: 93648.047476082982
- %prun¶
通过 python 代码分析器运行语句。
- 用法,在行模式中
%prun [options] statement
- 用法,在单元格模式中
%%prun [options] [statement] code… code…
在单元格模式中,其他代码行将附加到第一行中(可能为空)的语句。单元格模式允许您轻松分析多行块,而无需将它们放入单独的函数中。
给定的语句(不需要引号)通过 python 分析器运行,方式类似于 profile.run() 函数。命名空间在内部进行管理,以正确工作;profile.run 无法在 IPython 中使用,因为它对命名空间做出了某些假设,而这些假设在 IPython 中不成立。
选项
- -l <limit>
你可以对要打印的内容或打印多少内容进行限制。限制值可以是
字符串:只打印包含此字符串的函数名称的信息。
整数:只打印这么多行。
浮点数(在 0 和 1 之间):打印报告的这一部分(例如,使用 0.4 的限制仅查看最上面的 40%)。
你可以通过重复使用选项来组合多个限制。例如,
-l __init__ -l 5
将仅打印有关类构造函数的最上面的 5 行信息。- -r
返回分析生成的 pstats.Stats 对象。此对象包含有关该分析的所有信息,你以后可以在其他分析或其他函数中使用它。
- -s <key>
按给定的键对分析进行排序。你可以通过多次使用选项来提供多个键:‘-s key1 -s key2 -s key3…’。默认排序键为“time”。
以下内容是从下面引用的分析文档中逐字复制的
当提供多个键时,在之前选择的所有键中相等时,将使用其他键作为辅助条件。
只要缩写没有歧义,就可以将缩写用于任何键名。以下是当前定义的键
有效参数
含义
“calls”
调用计数
“cumulative”
累积时间
“file”
文件名
“module”
文件名
“pcalls”
基元调用计数
“line”
行号
“name”
函数名称
“nfl”
名称/文件/行
“stdname”
标准名称
“time”
内部时间
请注意,对统计信息的所有排序都是降序的(首先放置最耗时的项目),而名称、文件和行号搜索是升序的(即按字母顺序)。“nfl”和“stdname”之间的细微区别在于,标准名称是对打印名称的一种排序,这意味着嵌入的行号会以一种奇怪的方式进行比较。例如,如果文件名相同,第 3、20 和 40 行将按字符串顺序显示为“20”、“3”和“40”。相比之下,“nfl”对行号进行数字比较。事实上,sort_stats(“nfl”) 与 sort_stats(“name”, “file”, “line”) 相同。
- -T <filename>
将屏幕上显示的分析结果保存为文本文件。分析仍显示在屏幕上。
- -D <filename>
将(通过 dump_stats)分析统计信息保存到给定的文件名。此数据采用 pstats 模块可以理解的格式,并且是通过调用分析对象的 dump_stats() 方法生成的。分析仍显示在屏幕上。
- -q
禁止输出到分页器。最好与上面的 -T 和/或 -D 一起使用。
如果你想在分析器的控制下运行完整的程序,请使用
%run -p [prof_opts] filename.py [args to program]
,其中 prof_opts 包含此处描述的分析器特定选项。你可以使用以下命令阅读分析模块的完整文档
In [1]: import profile; profile.help()
7.3 版中已更改: 不再扩展用户变量,魔术行始终保持不变。
- %psearch¶
通过通配符在命名空间中搜索对象。
%psearch [选项] PATTERN [OBJECT TYPE]
注意:?可以用作 %psearch 的同义词,在开头或结尾处:a*? 和 ?a* 都等效于“%psearch a*”。不过,命令行的其余部分必须保持不变(选项排在第一位),因此例如以下形式是等效的
%psearch -i a* function -i a* function? ?-i a* function
参数
模式
其中,PATTERN 是一个包含 * 的字符串,作为通配符,类似于在 shell 中的使用。该模式在搜索路径上的所有命名空间中匹配。默认情况下,不匹配以单个 _ 开头的对象,许多 IPython 生成的对象都有一个单下划线。默认情况下,匹配不区分大小写。匹配还针对对象的属性进行,而不仅仅针对模块中的对象。
[对象类型]
是 types 模块中的 python 类型的名称。名称以小写形式给出,没有结尾类型,例如。StringType 写为 string。通过在此处添加类型,仅匹配与给定类型匹配的对象。在此处使用 all 使得模式匹配所有类型(这是默认值)。
选项
-a:使模式匹配即使名称以单个下划线开头的对象。这些名称通常从搜索中省略。
-i/-c:使模式不区分大小写/区分大小写。如果未给出这些选项,则从配置文件中读取默认值,选项为
InteractiveShell.wildcards_case_sensitive
。如果配置文件中未指定此选项,则 IPython 的内部默认值为执行区分大小写的搜索。-e/-s NAMESPACE:排除/搜索给定的命名空间。您指定的模式可以在以下任何命名空间中搜索:“builtin”、“user”、“user_global”、“internal”、“alias”,其中“builtin”和“user”是搜索默认值。请注意,在指定命名空间时不应使用引号。
-l:列出所有可用于对象匹配的对象类型。此函数可以在没有参数的情况下使用。
“Builtin”包含 python 模块 builtin,“user”包含所有用户数据,“alias”仅包含 shell 别名,不包含 python 对象,“internal”包含 IPython 使用的对象。“user_global”命名空间仅由嵌入式 IPython 实例使用,并且包含模块级全局变量。您可以使用 -s 将命名空间添加到搜索中,或使用 -e 将它们排除在外(这些选项可以给出多次)。
示例
%psearch a* -> objects beginning with an a %psearch -e builtin a* -> objects NOT in the builtin space starting in a %psearch a* function -> all functions beginning with an a %psearch re.e* -> objects beginning with an e in module re %psearch r*.e* -> objects that start with e in modules starting in r %psearch r*.* string -> all strings in modules beginning with r
区分大小写的搜索
%psearch -c a* list all object beginning with lower case a
显示以单个 _ 开头的对象
%psearch -a _* list objects beginning with a single underscore
列出可用对象
%psearch -l list all available object types
- %psource¶
打印(或通过分页器运行)对象的源代码。
- %pushd¶
将当前目录放在堆栈上并更改目录。
- 用法
%pushd [‘dirname’]
- %pwd¶
返回当前工作目录路径。
示例
In [9]: pwd Out[9]: '/home/tsuser/sprint/ipython'
- %pycat¶
通过分页器显示语法高亮的代码。
此 magic 类似于 cat 实用程序,但它将假定文件为 Python 源代码,并将使用语法高亮显示它。
此 magic 命令可以采用本地文件名、url、历史记录范围(请参见 %history)或宏作为参数。
如果没有给出参数,则打印到此为止的当前会话的历史记录。
%pycat myscript.py %pycat 7-27 %pycat myMacro %pycat http://www.example.com/myscript.py
- %pylab¶
%pylab [--no-import-all] [gui]
加载 numpy 和 matplotlib 以交互方式工作。
此函数允许您在 IPython 会话期间的任何时候激活 pylab(matplotlib、numpy 和交互支持)。
%pylab 进行以下导入
import numpy import matplotlib from matplotlib import pylab, mlab, pyplot np = numpy plt = pyplot from IPython.display import display from IPython.core.pylabtools import figsize, getfigs from pylab import * from numpy import *
如果您传递
--no-import-all
,则将排除最后两个*
导入。请参阅 %matplotlib magic,以了解有关在不影响交互式命名空间的情况下激活 matplotlib 的更多详细信息。
- 位置参数
- gui 要使用的 matplotlib 后端名称,例如“qt”或
‘widget’。如果给定,则使用相应的 matplotlib 后端,否则将使用 matplotlib 的默认设置(可以在 matplotlib 配置文件中设置)。
- 选项
- --no-import-all
阻止 IPython 在交互式名称空间中执行
import *
。可以使用 InteractiveShellApp.pylab_import_all 可配置项来控制此标志的默认行为。
- %quickref¶
显示快速参考表
- %recall¶
重复命令,或获取命令以输入行进行编辑。
%recall 和 %rep 是等效的。
%recall(无参数)
将上次计算结果(存储在特殊变量“_”中)的字符串版本放在下一个输入提示中。允许您创建精细的命令行,而无需使用复制粘贴
In[1]: l = ["hei", "vaan"] In[2]: "".join(l) Out[2]: heivaan In[3]: %recall In[4]: heivaan_ <== cursor blinking
%recall 45
将历史记录行 45 放在下一个输入提示中。使用 %hist 找出该数字。
%recall 1-4
将指定的行合并到一个单元格中,并将其放在下一个输入提示中。有关切片语法,请参阅 %history。
%recall foo+bar
如果 foo+bar 可以用户名称空间中进行评估,则结果将放在下一个输入提示中。否则,将在历史记录中搜索包含该子字符串的行,并将最近的一个放在下一个输入提示中。
- %rehashx¶
使用 $PATH 中的所有可执行文件更新别名表。
rehashx 明确检查 $PATH 中的每个条目是否具有执行访问权限(os.X_OK)。
在 Windows 下,它将可执行性检查为与扩展名的“|”分隔字符串的匹配,该字符串存储在 IPython 配置变量 win_exec_ext 中。默认为“exe|com|bat”。
此函数还重置模块完成器的根模块缓存,用于慢速文件系统。
- %reload_ext¶
按其模块名称重新加载 IPython 扩展。
- %rerun¶
重新运行上一个输入
默认情况下,您可以指定要重复的输入历史记录范围(如 %history)。如果没有参数,它将重复最后一行。
选项
-l <n>:重复最后 n 行输入,不包括当前命令。
-g foo:重复包含 foo 的最近一行
- %reset¶
通过删除用户定义的所有名称来重置名称空间,如果在没有参数的情况下调用,或通过删除某些类型的对象,例如 IPython 的 In[] 和 Out[] 容器中当前的所有内容(有关详细信息,请参阅参数)。
参数
- -f
强制重置,无需确认。
- -s
“软”重置:只清除您的名称空间,保留历史记录不变。对对象的引用可能会保留。默认情况下(没有此选项),我们会执行“硬”重置,为您提供一个新会话并删除当前会话中对所有对象的引用。
- --aggressive
尝试从 sys.modules 中积极删除模块;这可能允许您重新导入已更新的 Python 模块并获取更改,但可能会产生意想不到的后果。
- in
重置输入历史记录
- out
重置输出历史记录
- dhist
重置目录历史记录
- array
仅重置为 NumPy 数组的变量
另请参阅
reset_selective:以
%reset_selective
形式调用示例
In [6]: a = 1 In [7]: a Out[7]: 1 In [8]: 'a' in get_ipython().user_ns Out[8]: True In [9]: %reset -f In [1]: 'a' in get_ipython().user_ns Out[1]: False In [2]: %reset -f in Flushing input history In [3]: %reset -f dhist in Flushing directory history Flushing input history
注释
从不实现标准输入的客户端(例如 ipython 笔记本界面)调用此魔术将重置名称空间,而无需确认。
- %reset_selective¶
通过删除用户定义的名称来重置名称空间。
输入/输出历史记录保留,以备您需要。
%reset_selective [-f] regex
如果不包含 regex,则不执行任何操作
- 选项
-f:强制重置,无需确认。
另请参阅
reset:以
%reset
形式调用示例
出于教学原因,我们首先完全重置名称空间,因此您的输出看起来与本示例完全相同;实际上,您不需要完全重置
In [1]: %reset -f
现在,使用一个干净的名称空间,我们可以制作一些变量,并使用
%reset_selective
仅删除与我们的 regexp 匹配的名称In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8 In [3]: who_ls Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c'] In [4]: %reset_selective -f b[2-3]m In [5]: who_ls Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c'] In [6]: %reset_selective -f d In [7]: who_ls Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c'] In [8]: %reset_selective -f c In [9]: who_ls Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m'] In [10]: %reset_selective -f b In [11]: who_ls Out[11]: ['a']
注释
从不实现标准输入的客户端(例如 ipython 笔记本界面)调用此魔术将重置名称空间,而无需确认。
- %run¶
在 IPython 中以程序形式运行指定的文件。
用法
%run [-n -i -e -G] [( -t [-N<N>] | -d [-b<N>] | -p [profile options] )] ( -m mod | filename ) [args]
filename 参数应为纯 Python 脚本(扩展名为
.py
)或具有自定义 IPython 语法(例如魔术)的文件。如果是后者,则该文件可以是扩展名为.ipy
的脚本,也可以是扩展名为.ipynb
的 Jupyter 笔记本。在运行 Jupyter 笔记本时,print 语句和其他显示对象输出将显示在终端中(如果正在使用终端兼容后端,甚至 matplotlib 图形也会打开)。请注意,在系统命令行中,jupyter run
命令提供了类似的功能,用于执行笔记本(尽管当前在支持的选项方面存在一些差异)。文件名之后的参数作为命令行参数传递给程序(放入 sys.argv)。然后,控制权返回到 IPython 的提示符。
这类似于在系统提示符下运行
python file args
,但具有为您提供 IPython 追踪信息以及将所有变量加载到您的交互式名称空间以供进一步使用(除非使用了 -p,请参见下文)。该文件在一个最初仅包含
__name__=='__main__'
和按指示构造的 sys.argv 的名称空间中执行。因此,它看到其环境就像以独立程序运行一样(除了共享全局对象,例如先前导入的模块)。但在执行之后,IPython 交互式名称空间会更新为程序中定义的所有变量(__name__ 和 sys.argv 除外)。这允许非常方便地加载代码以进行交互式工作,同时为每个程序提供一个“干净的表格”以供运行。参数使用类 shell 的 glob 匹配进行扩展。可以使用模式“*”、“?”、“[seq]”和“[!seq]”。此外,波浪号“~”将扩展为用户的 home 目录。与真正的 shell 不同,引号不会抑制扩展。使用两个反斜杠(例如
\\*
)来抑制扩展。要完全禁用这些扩展,可以使用 -G 标志。在 Windows 系统上,不支持在指定文件时使用单引号
'
。使用双引号"
。选项
- -n
__name__ 不设置为“__main__”,而是设置为运行文件的名称(不带扩展名)(与 python 在导入时所做的一样)。这允许运行脚本并重新加载其中的定义,而无需调用受
if __name__ == "__main__"
子句保护的代码。- -i
在 IPython 的命名空间中运行文件,而不是在空命名空间中运行。如果您正在试验依赖于交互式定义的变量的文本编辑器中编写的代码,这将非常有用。
- -e
忽略正在运行的脚本中的 sys.exit() 调用或 SystemExit 异常。这在使用 IPython 运行单元测试时特别有用,单元测试总是以 sys.exit() 调用退出。在这种情况下,您感兴趣的是测试结果的输出,而不是查看单元测试模块的回溯。
- -t
在运行结束时打印时序信息。IPython 将为您提供脚本的估计 CPU 时间消耗,在 Unix 下使用 resource 模块来避免 time.clock() 的环绕问题。在 Unix 下,还给出了在系统任务上花费的时间的估计值(在 Windows 平台上,报告为 0.0)。
如果给出了 -t,则可以给出附加的
-N<N>
选项,其中 <N> 必须是一个整数,表示您希望脚本运行的次数。最终时序报告将包括总结果和每次运行的结果。例如(测试脚本 uniq_stable.py)
In [1]: run -t uniq_stable IPython CPU timings (estimated): User : 0.19597 s. System: 0.0 s. In [2]: run -t -N5 uniq_stable IPython CPU timings (estimated): Total runs performed: 5 Times : Total Per run User : 0.910862 s, 0.1821724 s. System: 0.0 s, 0.0 s.
- -d
在 Python 调试器 pdb 的控制下运行您的程序。这允许您逐步执行程序、监视变量等。在内部,IPython 所做的事情类似于调用
pdb.run('execfile("YOURFILENAME")')
在文件的第 1 行设置断点。您可以使用 -bN 选项(其中 N 必须是整数)将此自动断点的行号更改为 <N>。例如
%run -d -b40 myscript
将在 myscript.py 的第 40 行设置第一个断点。请注意,第一个断点必须设置在实际执行某些操作的行上(而不是注释或文档字符串),才能停止执行。
或者,您可以在不同的文件中指定断点
%run -d -b myotherfile.py:20 myscript
当 pdb 调试器启动时,您将看到一个 (Pdb) 提示符。您必须首先输入“c”(不带引号)才能开始执行到第一个断点。
输入“help”可获取有关调试器使用情况的信息。您可以在提示符处使用“import pdb;pdb.help()”轻松查看 pdb 的完整文档。
- -p
在 Python 分析器模块的控制下运行程序(该模块打印执行时间、函数调用等的详细报告)。
您可以在 -p 后传递其他选项,这些选项会影响分析器本身的行为。有关详细信息,请参阅 %prun 的文档。
在此模式下,程序的变量不会传播回 IPython 交互式命名空间(因为它们保留在分析器执行它们的命名空间中)。
在内部,这会触发对 %prun 的调用,有关专门用于分析的选项的详细信息,请参阅其文档。
有一个特殊用法,上述文本不适用于此用法:如果文件名以 .ipy[nb] 结尾,则该文件将作为 ipython 脚本运行,就像在 IPython 提示符中编写命令一样。
- -m
指定要加载的模块名称,而不是脚本路径。类似于 python 解释器的 -m 选项。如果您想与其他 %run 选项结合使用,请将此选项放在最后。与 python 解释器不同,只允许源模块,不允许 .pyc 或 .pyo 文件。例如
%run -m example
将运行示例模块。
- -G
禁用类似 shell 的参数全局扩展。
- %save¶
将一组行或宏保存到给定的文件名。
- 用法
%save [选项] 文件名 [历史记录]
选项
-r:使用“原始”输入。默认情况下,使用“已处理”历史记录,以便以转换后的版本将魔术加载到有效的 Python 中。如果给出了此选项,则使用命令行中键入的原始输入。
-f:强制覆盖。如果文件存在,则 %save 将提示覆盖,除非给出了 -f。
-a:追加到文件,而不是覆盖它。
历史记录参数使用与 %history 相同的语法作为输入范围,然后将行保存到您指定的 filename 中。
如果没有指定范围,则保存到此为止的当前会话的历史记录。
如果您自己没有这样做,它会向文件添加一个“py”扩展名,并且在覆盖现有文件之前它会要求确认。
如果使用了
-r
选项,则默认扩展名是.ipy
。
- %sc¶
Shell 捕获 - 运行 shell 命令并捕获输出(已弃用,使用 !)。
已弃用。次优,保留以保持向后兼容性。
您应该改用“var = !command”形式。示例
“%sc -l myfiles = ls ~”现在应该写成
“myfiles = !ls ~”
myfiles.s、myfiles.l 和 myfiles.n 仍然适用于如下所述。
%sc [选项] varname=command
IPython 将使用 commands.getoutput() 运行给定的命令,然后使用名为 varname 的变量更新用户的交互式命名空间,其中包含调用的值。您的命令可以包含 shell 通配符、管道等。
语法中的“=”符号是必需的,您提供的变量名必须遵循 Python 的有效名称标准约定。
(内部使用存在没有变量名的特殊格式)
选项
-l:列出输出。在将其分配给给定变量之前,按换行符将输出拆分为一个列表。默认情况下,输出存储为单个字符串。
-v:详细。打印变量的内容。
在大多数情况下,您不需要拆分为列表,因为返回值是一种特殊类型的字符串,它可以自动提供其内容,无论是作为列表(按换行符拆分)还是作为空格分隔的字符串。这些分别方便于顺序处理或传递给 shell 命令。
例如
# Capture into variable a In [1]: sc a=ls *py # a is a string with embedded newlines In [2]: a Out[2]: 'setup.py\nwin32_manual_post_install.py' # which can be seen as a list: In [3]: a.l Out[3]: ['setup.py', 'win32_manual_post_install.py'] # or as a whitespace-separated string: In [4]: a.s Out[4]: 'setup.py win32_manual_post_install.py' # a.s is useful to pass as a single command line: In [5]: !wc -l $a.s 146 setup.py 130 win32_manual_post_install.py 276 total # while the list form is useful to loop over: In [6]: for f in a.l: ...: !wc -l $f ...: 146 setup.py 130 win32_manual_post_install.py
类似地,-l 选项返回的列表也是特殊的,因为您同样可以在它们上调用 .s 属性以自动从其内容中获取空格分隔的字符串
In [7]: sc -l b=ls *py In [8]: b Out[8]: ['setup.py', 'win32_manual_post_install.py'] In [9]: b.s Out[9]: 'setup.py win32_manual_post_install.py'
总之,用于输出捕获的列表和字符串具有以下特殊属性
.l (or .list) : value as list. .n (or .nlstr): value as newline-separated string. .s (or .spstr): value as space-separated string.
- %set_env¶
设置环境变量。假设“val”是用户命名空间中的一个名称,或者 val 是求值后为字符串的内容。
- 用法
%set_env var val
:设置 var 的值
%set_env var=val
:设置 var 的值
%set_env var=$val
:设置 var 的值,如果可能,使用 Python 扩展
- %sx¶
Shell 执行 - 运行 shell 命令并捕获输出(!! 是简写)。
%sx 命令
IPython 将使用 commands.getoutput() 运行给定的命令,并将结果格式化为列表(以“n”分割)。由于输出是“返回的”,因此它将存储在 ipython 的常规输出缓存 Out[N] 和“_N”自动变量中。
注释
1) 如果输入行以“!!”开头,则自动调用 %sx。也就是说,虽然
!ls
导致 ipython 仅发出 system(‘ls’),但键入
!!ls
相当于简写
%sx ls
2) %sx 与 %sc 的不同之处在于 %sx 会自动拆分为列表,如“%sc -l”。这样做是为了尽可能轻松地通过其他 python 命令处理面向行的 shell 输出。%sc 旨在提供更精细的控制,但需要更多键入。
3) 就像 %sc -l 一样,这是一个具有特殊属性的列表
.l (or .list) : value as list. .n (or .nlstr): value as newline-separated string. .s (or .spstr): value as whitespace-separated string.
当尝试将此类列表用作系统命令的参数时,这非常有用。
- %system¶
Shell 执行 - 运行 shell 命令并捕获输出(!! 是简写)。
%sx 命令
IPython 将使用 commands.getoutput() 运行给定的命令,并将结果格式化为列表(以“n”分割)。由于输出是“返回的”,因此它将存储在 ipython 的常规输出缓存 Out[N] 和“_N”自动变量中。
注释
1) 如果输入行以“!!”开头,则自动调用 %sx。也就是说,虽然
!ls
导致 ipython 仅发出 system(‘ls’),但键入
!!ls
相当于简写
%sx ls
2) %sx 与 %sc 的不同之处在于 %sx 会自动拆分为列表,如“%sc -l”。这样做是为了尽可能轻松地通过其他 python 命令处理面向行的 shell 输出。%sc 旨在提供更精细的控制,但需要更多键入。
3) 就像 %sc -l 一样,这是一个具有特殊属性的列表
.l (or .list) : value as list. .n (or .nlstr): value as newline-separated string. .s (or .spstr): value as whitespace-separated string.
当尝试将此类列表用作系统命令的参数时,这非常有用。
- %tb¶
打印上次回溯。
可以选择指定异常报告模式,调整回溯的详细程度。默认情况下,使用当前活动的异常模式。有关更改异常报告模式,请参见 %xmode。
有效模式:Plain、Context、Verbose 和 Minimal。
- %time¶
对 Python 语句或表达式的执行进行计时。
打印 CPU 和时钟时间,并返回表达式的值(如果有)。请注意,在 Win32 下,系统时间始终报告为 0,因为无法测量。
此函数可以用作行和单元魔术
在行模式下,您可以对单行语句进行计时(尽管可以使用分号链接多个语句)。
在单元模式下,您可以对单元正文进行计时(紧随其后的语句会引发错误)。
此函数提供非常基本的计时功能。使用 timeit 魔术对测量进行更多控制。
7.3 版中已更改: 不再扩展用户变量,魔术行始终保持不变。
示例
In [1]: %time 2**128 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.00 Out[1]: 340282366920938463463374607431768211456L In [2]: n = 1000000 In [3]: %time sum(range(n)) CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s Wall time: 1.37 Out[3]: 499999500000L In [4]: %time print('hello world') hello world CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.00
注意
如果给定表达式的 Python 编译时间超过 0.1 秒,将报告该时间。
在下面的示例中,实际指数运算是在编译时由 Python 完成的,因此虽然表达式的计算可能需要相当长的时间,但该时间完全是由于编译
In [5]: %time 3**9999; CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.00 s In [6]: %time 3**999999; CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.00 s Compiler : 0.78 s
- %timeit¶
对 Python 语句或表达式的执行进行计时
- 用法,在行模式中
%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] 语句
- 或在单元格模式下
%%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code code code…
使用 timeit 模块对 Python 语句或表达式执行时间。此函数既可以用作行魔术,也可以用作单元格魔术
在行模式下,您可以对单行语句进行计时(尽管可以使用分号链接多个语句)。
在单元格模式下,第一行中的语句用作设置代码(执行但不计时),单元格的主体计时。单元格主体可以访问在设置代码中创建的任何变量。
选项:-n<N>:在循环中执行给定语句 <N> 次。如果未提供 <N>,则确定 <N> 以获得足够的准确性。
-r<R>:重复次数 <R>,每个重复由 <N> 个循环组成,并取平均结果。默认值:7
-t:使用 time.time 测量时间,这是 Unix 上的默认值。此函数测量时钟时间。
-c:使用 time.clock 测量时间,这是 Windows 上的默认值,并测量时钟时间。在 Unix 上,改为使用 resource.getrusage,并返回 CPU 用户时间。
-p<P>:使用 <P> 位精度显示计时结果。默认值:3
-q:静默,不打印结果。
- -o:返回一个 TimeitResult,可以存储在变量中以更详细地检查
结果。
7.3 版中已更改: 不再扩展用户变量,魔术行始终保持不变。
示例
In [1]: %timeit pass 8.26 ns ± 0.12 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each) In [2]: u = None In [3]: %timeit u is None 29.9 ns ± 0.643 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) In [4]: %timeit -r 4 u == None In [5]: import time In [6]: %timeit -n1 time.sleep(2)
当访问变量时,%timeit 报告的时间会略高于 timeit.py 脚本报告的时间。这是因为 %timeit 在 shell 的命名空间中执行语句,而 timeit.py 使用单个设置语句导入函数或创建变量。通常,只要不将 timeit.py 的结果与 %timeit 的结果混合,偏差就没有关系。
- %unalias¶
删除别名
- %unload_ext¶
按其模块名称卸载 IPython 扩展。
并非所有扩展都可以卸载,只有那些定义了
unload_ipython_extension
函数的扩展才能卸载。
- %who¶
打印所有交互式变量,并进行一些最小的格式化。
如果给出了任何参数,则只打印类型与其中之一匹配的变量。例如
%who function str
将只列出函数和字符串,排除所有其他类型的变量。要查找正确的类型名称,只需在命令行中使用 type(var) 即可查看 python 如何打印类型名称。例如
In [1]: type('hello')\ Out[1]: <type 'str'>
表示字符串的类型名称为“str”。
%who
始终排除通过配置文件加载的已执行名称以及 IPython 内部的东西。这是故意的,因为您通常可能会加载许多模块,而 %who 的目的是仅向您显示您手动定义的内容。
示例
定义两个变量并使用 who 列出它们
In [1]: alpha = 123 In [2]: beta = 'test' In [3]: %who alpha beta In [4]: %who int alpha In [5]: %who str beta
- %who_ls¶
返回所有交互式变量的排序列表。
如果给出了参数,则仅返回与这些参数匹配类型的变量。
示例
定义两个变量并使用 who_ls 列出它们
In [1]: alpha = 123 In [2]: beta = 'test' In [3]: %who_ls Out[3]: ['alpha', 'beta'] In [4]: %who_ls int Out[4]: ['alpha'] In [5]: %who_ls str Out[5]: ['beta']
- %whos¶
与 %who 类似,但提供有关每个变量的一些额外信息。
可以应用 %who 的相同类型过滤。
对于所有变量,打印类型。此外,它还打印
对于 {}、[]、():它们的长度。
对于 numpy 数组,提供形状、元素数、类型代码和内存大小的摘要。
其他所有内容:字符串表示形式,如果太长则截取其中间部分。
示例
定义两个变量并使用 whos 列出它们
In [1]: alpha = 123 In [2]: beta = 'test' In [3]: %whos Variable Type Data/Info alpha int 123 beta str test
- %xdel¶
删除一个变量,尝试从 IPython 的机制引用它的任何位置清除它。默认情况下,这使用用户命名空间中命名对象的标识来删除以其他名称持有的引用。该对象还从输出历史记录中删除。
- 选项
-n:从所有命名空间中删除指定名称,而不检查它们的标识。
- %xmode¶
切换异常处理程序的模式。
有效模式:Plain、Context、Verbose 和 Minimal。
如果在没有参数的情况下调用,则充当切换开关。
在详细模式下,值
--show
(和--hide
)将分别显示(或隐藏)带有__tracebackhide__ = True
值设置的帧。
单元格魔术¶
- %%bash¶
%%bash 脚本魔术
在子进程中使用 bash 运行单元格。
这是
%%script bash
的快捷方式
- %%capture¶
%capture [--no-stderr] [--no-stdout] [--no-display] [output]
运行单元格,捕获 stdout、stderr 和 IPython 的 rich display() 调用。
- 位置参数
- output 存储输出的变量的名称。这是一个
utils.io.CapturedIO 对象,具有用于捕获的输出文本的 stdout/err 属性。CapturedOutput 还具有用于显示输出的 show() 方法,以及 __call__,因此你可以使用它来快速显示输出。如果未指定,则会丢弃捕获的输出。
- 选项
- --no-stderr
不捕获 stderr。
- --no-stdout
不捕获 stdout。
- --no-display
不捕获 IPython 的 rich display。
- %%html¶
%html [--isolated]
将单元格呈现为 HTML 块
- 选项
- --isolated
将单元格注释为“isolated”。孤立的单元格在其自己的 <iframe> 标记内呈现
- %%javascript¶
运行 Javascript 代码的单元格块
从 IPython 8.0 开始,%%javascript 即将弃用,将被更灵活的系统取代
- %%js¶
运行 Javascript 代码的单元格块
别名
%%javascript
从 IPython 8.0 开始,%%javascript 即将弃用,将被更灵活的系统取代
- %%latex¶
将单元格呈现为 LaTeX 块
支持的 LaTeX 子集取决于客户端中的实现。在 Jupyter Notebook 中,此 magic 仅呈现 MathJax 定义的 LaTeX 子集 [此处](https://docs.mathjax.org/en/v2.5-latest/tex.html).
- %%markdown¶
将单元格呈现为 Markdown 文本块
- %%perl¶
%%perl 脚本 magic
在子进程中使用 perl 运行单元格。
这是
%%script perl
的快捷方式
- %%pypy¶
%%pypy 脚本 magic
在子进程中使用 pypy 运行单元格。
这是
%%script pypy
的快捷方式
- %%python¶
%%python 脚本 magic
在子进程中使用 python 运行单元格。
这是
%%script python
的快捷方式
- %%python2¶
%%python2 脚本 magic
在子进程中使用 python2 运行单元格。
这是
%%script python2
的快捷方式
- %%python3¶
%%python3 脚本 magic
在子进程中使用 python3 运行单元格。
这是
%%script python3
的快捷方式
- %%ruby¶
%%ruby 脚本 magic
在子进程中使用 ruby 运行单元格。
这是
%%script ruby
的快捷方式
- %%script¶
%shebang [--no-raise-error] [--proc PROC] [--bg] [--err ERR] [--out OUT]
通过 shell 命令运行单元格
该
%%script
行类似于脚本的 #! 行,指定要运行的程序(bash、perl、ruby 等)。单元格的其余部分由该程序运行。
示例
In [1]: %%script bash ...: for i in 1 2 3; do ...: echo $i ...: done 1 2 3
- 选项
- --no-raise-error
如果您获得非零退出代码,除了 stderr 上的流之外,是否应引发错误消息。
- --proc PROC
用于存储 Popen 实例的变量。仅在给定 –bg 选项时使用。
- --bg
是否在后台运行脚本。如果给出,查看命令输出的唯一方法是使用 –out/err。
- --err ERR
用于存储脚本中 stderr 的变量。如果脚本在后台运行,这将是 stderr pipe,而不是 stderr 文本本身,并且不会自动关闭。
- --out OUT
用于存储脚本 stdout 的变量。如果脚本已后台运行,这将是 stdout 管道,而不是 stderr 文本本身,并且不会自动关闭。
- %%sh¶
%%sh 脚本魔术
在子进程中使用 sh 运行单元格。
这是
%%script sh
的快捷方式
- %%svg¶
将单元格渲染为 SVG 字面值
- %%writefile¶
%writefile [-a] filename
将单元格的内容写入文件。
除非指定 -a (–append) 标志,否则将覆盖文件。
- 位置参数
filename 要写入的文件
- 选项
- -a, --append
将单元格的内容追加到现有文件。如果文件不存在,将创建该文件。