ipython 内置魔术命令(magic)
原文:https://ipython.readthedocs.io/en/stable/interactive/magics.html
ipython提供了一些好用的内置魔法命令,能够帮助我们快速完成工作。
重要说明
本文档涵盖IPython 6.0版或更高版本。从6.0版开始,IPython不再支持与3.3版以下的Python兼容,包括Python 2.7的所有版本。
内置魔术命令
注意
对于Jupyter:魔术命令(magic)特定于IPython内核并由IPython内核提供。魔术是否在内核上可用是由内核开发人员根据每个内核确定的。为了正常工作,Magics必须使用在基础语言中无效的语法元素。例如,IPython内核将%
Magics 的语法元素用作%
Python中无效的一元运算符,但其他语言可能%也
具有一定的含义。
这是从IPython附带的所有可用Magics函数的文档字符串自动生成的帮助。
您可以使用IPython创建和注册自己的Magics。您可以在PyPI上找到许多用户自己定义的Magics 。使用trove分类器 Framework :: IPython 可随意发布自己的内容。
行的魔术命令(jyputer line)
%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变量,就像使用!或!!进行系统调用一样。所有以“ $”为前缀的表达式都会被认为是python变量。有关语义规则的详细信息,请参见PEP-215:http : //www.python.org/peps/pep-0215.html。这是IPython用于变量扩展的库。如果要访问真正的shell变量,则需要额外的$来防止其被IPython认为是python变量:
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 1 loops, best of 3: 954 ns per loop In [3]: %%t -n1 ...: pass ...: 1 loops, best of 3: 954 ns per loop 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]: u'/home/testuser' In [7]: %alias_magic h history "-p -l 30" --line Created `%h` as an alias for `%history -l 30`.
- 位置参数:
-
名称要创建的魔术的名称。目标现有行或单元魔术的名称。
- 可选参数:
- -l, --line
-
创建行魔术别名。
- -c, --cell
-
创建一个单元魔术别名。
- -p PARAMS, --params PARAMS
-
参数传递给magic函数。
2020-6-23-cds
%autoawait
-
允许更改自动等待选项的状态。
这使您可以设置特定的异步代码运行器。
如果未传递任何值,则打印当前使用的异步集成以及是否已激活它。
它可以采用以下顺序评估的多个值:
-
错误/错误/关闭停用自动等待集成
-
True / True / on使用配置的默认循环激活自动等待集成
-
asyncio / curio / trio激活自动等待集成并使用与所述库的集成。
-
sync
打开伪同步集成(通常用于IPython.embed()
不使用真正的事件循环运行IPython并停用运行的异步代码。使用伪同步循环打开异步代码是未定义的行为,并且可能导致IPython崩溃。
如果传递的参数与上述任何一个都不匹配,并且是python标识符,请从用户名称空间获取所述对象并将其设置为运行器,然后激活自动等待。
如果对象是完全限定的对象名称,请尝试将其导入并将其设置为运行器,然后激活自动等待。
autoawait的确切行为是实验性的,并且可能会在IPython和Python的版本之间发生变化。
-
%autocall
-
使函数可调用,而不必键入括号。
用法:
%autocall [模式]
该模式可以是以下之一:0->关闭,1->智能,2->完整。如果未给出,则将打开和关闭该值(记住先前的状态)。
更详细地,这些值表示:
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
-
使魔术函数可调用,而不必键入初始%。
不带参数的情况下,打开/关闭(关闭时,您必须将其称为%automagic)。使用参数可以设置值,并且您可以使用以下任何一种(不区分大小写):
-
on,1,True:激活
-
off,0,False:停用。
请注意,魔术函数的优先级最低,因此,如果存在一个名称与魔术fn冲突的变量,则automagic不适用于该函数(您可以获取该变量)。但是,如果删除变量(del var),先前阴影的魔术函数将变为可见,可以再次自动魔术。
-
%bookmark
-
管理IPython的书签系统。
%bookmark <名称>-将书签设置为当前目录%bookmark <名称> <dir>-将书签设置为<dir>%bookmark -l-列出所有书签%bookmark -d <name>-移除书签%bookmark -r-移除所有书签
以后,您可以使用以下方式访问带有书签的文件夹:
%cd -b <name>
或者,如果没有名为<name>的目录并且定义了这样的书签,则简单地为'%cd <name>'。
您的书签会在IPython会话中持续存在,但是它们与每个配置文件相关联。
%cd
-
更改当前工作目录。
此命令自动在变量_dh中维护您在IPython会话期间访问的目录的内部列表。命令%dhist显示此历史记录格式正确。您也可以执行“ cd-<tab>”来方便地查看目录历史记录。
用法:
cd'dir':更改为目录'dir'。
cd-:更改为上次访问的目录。
cd-<n>:切换到目录历史记录中的第n个目录。
cd –foo:更改为与历史记录中的“ foo”匹配的目录
- cd -b <bookmark_name>:跳转到%bookmark设置的书签
- (注意:如果没有,cd <bookmark_name>就足够了
-
目录<bookmark_name>,但存在具有该名称的书签。)'cd -b <tab>'允许您制表完整的书签名称。
选项:
-q:安静。执行cd命令后,请勿打印工作目录。默认情况下,由于默认提示不显示路径信息,因此IPython的cd命令不会打印此目录。
请注意,!cd不适用于此目的,因为执行“命令”后,将立即丢弃运行!command的外壳程序。
例子
In [10]: cd parent/child /home/tsuser/parent/child
%colors
-
切换提示,信息系统和异常处理程序的配色方案。
当前实施的方案:NoColor,Linux,LightBG。
配色方案名称不区分大小写。
例子
要获得普通的黑白终端:
%colors nocolor
%conda
-
在当前内核中运行conda软件包管理器。
- 用法:
-
%conda安装[pkgs]
%config
-
配置IPython
%config类[.trait = value]
这种魔力暴露了大多数IPython配置系统。任何可配置类都应该能够使用以下简单行进行配置:
%config Class.trait=value
凡
value
将在用户的命名空间来解决,如果它是一个表达式或变量名。例子
要查看哪些类可用于config,请不传递任何参数:
In [1]: %config Available objects for config: TerminalInteractiveShell HistoryManager PrefilterManager AliasManager IPCompleter DisplayFormatter
要查看在给定类上可配置的内容,只需传递类名称:
In [2]: %config IPCompleter IPCompleter options IPCompleter.omit__names=<Enum> Current: 2 Choices: (0, 1, 2) Instruct the completer to omit private method names Specifically, when completing on ``object.<tab>``. When 2 [default]: all names that start with '_' will be excluded. When 1: all 'magic' names (``__foo__``) will be excluded. When 0: nothing will be excluded. IPCompleter.merge_completions=<CBool> Current: True Whether to merge completion results into a single list If False, only the completion results from the first non-empty completer will be returned. IPCompleter.limit_to__all__=<CBool> Current: False Instruct the completer to use __all__ for the completion Specifically, when completing on ``object.<tab>``. When True: only those names in obj.__all__ will be included. When False [default]: the __all__ attribute is ignored IPCompleter.greedy=<CBool> Current: False Activate greedy completion This will enable completion on elements of lists, results of function calls, etc., but can be unsafe because the code is actually evaluated on TAB.
但真正的用途是设置值:
In [3]: %config IPCompleter.greedy = True
如果这些值是变量,则从user_ns中读取这些值:
In [4]: feeling_greedy=False In [5]: %config IPCompleter.greedy = feeling_greedy
%debug
-
%debug [--breakpoint FILE:LINE] [statement [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 [选项] [参数]
%edit运行IPython的编辑器挂钩。该挂钩的默认版本设置为调用$ EDITOR环境变量指定的编辑器。如果未找到,则在Linux / Unix下默认为vi,在Windows下默认为记事本。有关如何更改编辑器挂钩的信息,请参见此文档字符串的末尾。
您也可以通过
TerminalInteractiveShell.editor
配置文件中的选项设置此编辑器的值 。如果您希望对IPython使用与典型默认值不同的编辑器(对于通常不设置环境变量的Windows用户),则这很有用。此命令使您可以在IPython会话中方便地编辑多行代码。
如果不带参数调用,%edit将打开一个带有临时文件的空编辑器,并在您关闭该文件时执行该文件的内容(请不要忘记保存它!)。
选项:
-n <数字>:以指定的行号打开编辑器。默认情况下,IPython编辑器挂钩使用unix语法“ editor + N filename”,但是如果您喜欢的编辑器支持使用不同语法的行号规范,则可以通过提供自己的修改挂钩来配置它。
-p:无论使用多长时间(在当前会话中),这将使用与上次使用时相同的数据来调用编辑器。
-r:使用“原始”输入。此选项仅适用于从用户历史记录中获取的输入。默认情况下,使用“处理过的”历史记录,以便将魔术以其转换后的版本加载到有效的Python中。如果指定了此选项,则将使用按命令行键入的原始输入。退出编辑器时,它将由IPython自己的处理器执行。
-x:退出后不要立即执行编辑的代码。如果您正在编辑需要使用命令行参数调用的程序,然后可以使用%run进行编辑,则这主要有用。
参数:
如果给出参数,则存在以下可能性:
-
如果参数是文件名,则IPython会将其加载到编辑器中。退出时,它将使用execfile()执行其内容,并将文件中的所有代码加载到交互式名称空间中。
-
参数是输入历史记录的范围,例如“ 7〜1 / 4-6”。语法与%history魔术中的语法相同。
-
如果参数是字符串变量,则其内容将加载到编辑器中。因此,您可以编辑任何包含python代码的字符串(包括先前编辑的结果)。
-
如果参数是对象的名称(不是字符串),则IPython将尝试在定义该文件的位置定位并在定义该位置的位置打开编辑器。您可以用来 在定义“功能”的位置准确加载编辑器,进行编辑并自动执行文件。
%edit function
-
如果该对象是宏(有关详细信息,请参见%macro),这将打开包含包含宏数据的临时文件的指定编辑器。退出后,宏将重新加载文件的内容。
注意:仅在Unix下支持以精确的行开头,并且某些编辑器(如kedit和gedit以及Gnome 2.8之前的版本)不理解此功能所需的'+ NUMBER'参数。像(X)Emacs,vi,jed,pico和joe这样的好编辑器都可以。
执行代码后,%edit将返回您在编辑器中键入的代码作为输出(除非它是现有文件)。这样,您就可以通过_ <NUMBER>或Out [<NUMBER>]将%edit作为变量重新调用时重新加载代码,其中<NUMBER>是输出的提示号。
请注意,也可以通过别名%ed获得%edit。
这是在编辑器内创建一个简单函数然后对其进行修改的示例。首先,启动编辑器:
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:使用python的var的设置值如果可能的话扩大
%gui
-
启用或禁用IPython GUI事件循环集成。
%gui [GUINAME]
这种魔力取代了使用(pylab / wthread / etc。)命令行标志激活的IPython的线程外壳。现在可以在运行时启用GUI工具包,并且键盘中断应该可以正常工作。支持以下工具包:wxPython,PyQt4,PyGTK,Tk和可可(OSX):
%gui wx # enable wxPython event loop integration %gui qt4|qt # enable PyQt4 event loop integration %gui qt5 # enable PyQt5 event loop integration %gui gtk # enable PyGTK event loop integration %gui gtk3 # enable Gtk3 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 [PATTERN ...]]] [-l [LIMIT]] [-u] [range [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-ready输出。
- -t
-
按照IPython的理解,打印“翻译的”历史记录。IPython在执行输入之前会过滤您的输入并将其全部转换为有效的Python源(例如,诸如魔术或别名之类的东西会转换为函数调用)。使用此选项,您将看到本机历史记录而不是用户输入的版本:'%cd /'将被视为'get_ipython()。run_line_magic(“ cd”,“ /”)'而不是'%cd / '。
- -f FILENAME
-
FILENAME:不要将输出打印到屏幕上,而是将其重定向到给定的文件。该文件始终被覆盖,尽管可以的话,IPython首先要求确认。特别是,从IPython Notebook界面运行命令“ history -f FILENAME”将替换FILENAME,即使该文件已经存在而没有确认。
- -g <[PATTERN [PATTERN …]]>
-
将arg视为要在(完整)历史记录中搜索的全局模式。这包括保存的历史记录(几乎所有曾经写过的命令)。该模式可能包含“?” 匹配一个未知字符,“ *”匹配任意数量的未知字符。使用'%hist -g'显示完整的保存历史记录(可能很长)。
- -l <[LIMIT]>
-
获取所有会话的最后n行。将n指定为单个arg,或者默认值为最后10行。
- -u
-
使用搜寻历史记录时
-g
,仅显示唯一的历史记录。
%killbgscripts
-
杀死%% script及其家族开始的所有BG流程。
%load
-
将代码加载到当前前端。
- 用法:
-
%load [选项]源
源可以是文件名,URL,输入历史记录范围,宏或用户名称空间中的元素
选项:
-r <行>:指定要从源加载的行或行范围。范围可以指定为xy(x..y)或python风格的x:y(x ..(y-1))。限制x和y都可以留为空白(分别表示文件的开头和结尾)。
-s <symbols>:指定要从python源加载的函数或类。
-y:不要求确认是否加载20万个字符以上的源。
-n:搜索源代码时包括用户的名称空间。
该魔术命令可以采用本地文件名,URL,历史记录范围(请参见%history)或宏作为参数,除非加载了-y标志,否则如果加载了超过20万个字符,它将提示您进行确认。前端不支持raw_input:
%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使用第二个可选参数:日志记录模式。这可以是以下之一(请注意,模式未加引号):
- 附加
-
将日志记录在任何现有文件的末尾。
- 后备
-
将任何现有文件重命名为〜,然后开始命名。
- 全球
-
附加到主目录中的单个日志文件。
- 过度
-
覆盖任何现有日志。
- 旋转
-
创建循环日志: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,…上面的数字)连接成单个字符串而成的字符串。此变量的作用类似于自动功能,就像您键入它们一样重新执行这些行。您只需在提示符下键入“名称”,代码便会执行。%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
-
打印有关魔术功能系统的信息。
支持的格式:-latex,-brief,-rest
%matplotlib
-
%matplotlib [-l] [gui]
设置matplotlib以进行交互工作。
此功能使您可以在IPython会话期间的任何时候激活matplotlib交互式支持。它不会将任何内容导入交互式名称空间。
如果您在IPython Notebook中使用内联matplotlib后端,则可以使用以下命令设置启用的图形格式:
In [1]: from IPython.display import set_matplotlib_formats In [2]: set_matplotlib_formats('pdf', 'svg')
嵌入式数字的默认设置
bbox_inches
为“紧密”。这会导致显示的图像和使用创建的相同图像之间的差异savefig
。可以使用%config
魔术禁用此行为 :In [3]: %config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
此外,看到的文档字符串
IPython.display.set_matplotlib_formats
和IPython.display.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', 'notebook', 'wx', 'qt', 'nbagg', 'gtk', 'tk', 'inline']
- 位置参数:
- gui要使用的matplotlib后端的名称(“ agg”,“ gtk”,“ gtk3”,
-
'inline','ipympl','nbagg','notebook','osx','pdf','ps','qt','qt4','qt5','svg','tk','widget ','wx')。如果给定,则使用相应的matplotlib后端,否则它将是matplotlib的默认值(您可以在matplotlib配置文件中进行设置)。
- 可选参数:
- -l, --list
-
显示可用的matplotlib后端
%notebook
-
%notebook filename
导出和转换IPython笔记本。
该函数可以将当前的IPython历史记录导出到笔记本文件中。例如,要将历史记录导出到“ foo.ipynb”,请执行“%notebook foo.ipynb”。
-e或–export标志在IPython 5.2中已弃用,以后将被删除。
- 位置参数:
-
文件名笔记本名称或文件名
%page
-
漂亮地打印对象并通过寻呼机显示它。
%page [选项]对象
如果没有给出对象,则使用_(最后一个输出)。
选项:
-r:页面str(object),不要漂亮地打印它。
%pastebin
-
将代码上传到dpaste的粘贴容器中,返回URL。
- 用法:
-
%pastebin [-d“自定义描述”] 1-7
该参数可以是输入历史记录范围,文件名或字符串或宏的名称。
选项:
- -d:传递要点的自定义描述。默认会说
-
“从IPython粘贴”。
%pdb
-
控制pdb交互式调试器的自动调用。
调用为“%pdb打开”,“%pdb 1”,“%pdb关闭”或“%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
-
打印(或通过分页器运行)定义对象的文件。
该文件在对象定义开始的行处打开。如果设置了IPython,它将遵循环境变量PAGER,否则将尽最大努力以方便的形式打印文件。
如果给定的参数不是当前定义的对象,则IPython将尝试将其解释为文件名(如果需要,自动添加.py扩展名)。因此,您可以将%pfile用作语法突出显示代码查看器。
%pinfo
-
提供有关对象的详细信息。
'%pinfo对象'只是对象的同义词?或?object。
%pinfo2
-
提供有关对象的额外详细信息。
'%pinfo2 object'仅仅是object的同义词?或对象。
%pip
-
在当前内核中运行pip软件包管理器。
- 用法:
-
%pip安装[pkgs]
%popd
-
更改目录从堆栈顶部弹出。
%pprint
-
打开/关闭漂亮的打印。
%precision
-
设置浮点精度以进行漂亮的打印。
可以设置整数精度或格式字符串。
如果已导入numpy且precision为int,还将通过设置numpy显示的精度
numpy.set_printoptions
。如果未提供任何参数,则将恢复默认值。
例子
In [1]: from math import pi In [2]: %precision 3 Out[2]: u'%.3f' In [3]: pi Out[3]: 3.142 In [4]: %precision %i Out[4]: u'%i' In [5]: pi Out[5]: 3 In [6]: %precision %e Out[6]: u'%e' In [7]: pi**10 Out[7]: 9.364805e+04 In [8]: %precision Out[8]: u'%r' In [9]: pi**10 Out[9]: 93648.047476082982
%prun
-
通过python代码分析器运行一条语句。
- 在线模式下的用法:
-
%prun [选项]语句
- 用法,在单元格模式下:
-
%% prun [选项] [语句]代码…代码…
在单元模式下,其他代码行将添加到第一行(可能为空)语句中。单元模式使您可以轻松地分析多行块,而不必将其置于单独的功能中。
给定的语句(不需要引号)通过python profiler以类似于profile.run()函数的方式运行。内部对命名空间进行了管理,以使其正常工作;profile.run不能在IPython中使用,因为它对IPython中不存在的名称空间做出了某些假设。
选项:
- -l <limit>
-
您可以限制打印什么配置文件或打印多少配置文件。极限值可以是:
-
字符串:仅打印包含该字符串的函数名称信息。
-
整数:仅打印许多行。
-
浮点数(0到1之间):报告的这一部分被打印(例如,使用限制0.4只能看到最上面的40%)。
您可以将多个限制与重复使用该选项结合在一起。例如,将仅打印有关类构造函数的最上面5行信息。
-l __init__ -l 5
-
- -r
-
返回分析生成的pstats.Stats对象。该对象中包含有关概要文件的所有信息,您以后可以将其用于进一步分析或用于其他功能。
- -s <key>
-
按给定的键对配置文件进行排序。您可以通过多次使用该选项来提供多个密钥:“ -s key1 -s key2 -s key3…”。默认排序键为“时间”。
从下面引用的配置文件文档中逐字复制了以下内容:
如果提供了多个键,则在它们前面选择的所有键都相等时,将其他键用作次要条件。
缩写可以用于任何键名,只要缩写是明确的即可。以下是当前定义的键:
有效Arg
含义
“通话”
通话次数
“累积”
累计时间
“文件”
文档名称
“模块”
文档名称
“呼唤”
原始呼叫计数
“线”
电话号码
“名称”
功能名称
“ nfl”
名称/文件/行
“ stdname”
标准名称
“时间”
内部时间
请注意,统计信息上的所有排序均以降序排列(首先放置最耗时的项),其中名称,文件和行号搜索按升序排列(即,字母顺序)。“ 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一起使用。
如果要在探查器的控制下运行完整程序,请使用 prof_opts包含探查器特定选项的地方,如此处所述。
%run -p [prof_opts] filename.py [args to program]
您可以使用以下内容阅读配置文件模块的完整文档:
In [1]: import profile; profile.help()
在7.3版中进行了更改:用户变量不再扩展,魔术线始终保持不变。
%psearch
-
通过通配符在名称空间中搜索对象。
%psearch [选项]模式[对象类型]
注意: ?可以在开头或结尾用作%psearch的同义词:都是a *?和?a *等效于'%psearch a *'。尽管如此,命令行的其余部分必须保持不变(选项优先),因此例如以下形式是等效的
%psearch -ia *函数-ia *函数??-ia *功能
参数:
模式
其中PATTERN是包含*作为通配符的字符串,类似于其在shell中的用法。该模式在搜索路径上的所有名称空间中都匹配。默认情况下,以单个_开头的对象不匹配,许多IPython生成的对象都有单个下划线。默认为不区分大小写的匹配。匹配还不仅针对模块中的对象,还针对对象的属性进行。
[对象类型]
是来自types模块的python类型的名称。名称以小写形式给出,没有结尾类型,例如。StringType是写入的字符串。通过在此处添加类型,只会匹配与给定类型匹配的对象。在此处使用全部将使模式匹配所有类型(这是默认设置)。
选项:
-a:使模式甚至匹配名称以单个下划线开头的对象。这些名称通常从搜索中省略。
-i / -c:使模式区分大小写/不区分大小写。如果这两个选项均未给出,则使用选项从配置文件中读取默认值
InteractiveShell.wildcards_case_sensitive
。如果未在配置文件中指定此选项,则IPython的内部默认设置是区分大小写。-e / -s NAMESPACE:排除/搜索给定的名称空间。可以在以下任何名称空间中搜索您指定的模式:“ builtin”,“ user”,“ user_global”,“ internal”,“ alias”,其中“ builtin”和“ user”是搜索默认设置。请注意,指定名称空间时不应使用引号。
-l:列出用于对象匹配的所有可用对象类型。此函数可以不带参数使用。
“ Builtin”包含内置的python模块,“ 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
-
通过寻呼机显示语法高亮的文件。
这种魔力类似于cat实用程序,但是它将假定该文件是Python源,并将通过语法高亮显示它。
这个魔术命令可以使用本地文件名,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的更多详细信息,请参见%matplotlib魔术。
- 位置参数:
- gui要使用的matplotlib后端的名称(“ agg”,“ gtk”,
-
'gtk3','inline','ipympl','nbagg','notebook','osx','pdf','ps','qt','qt4','qt5','svg','tk ','小部件','wx')。如果给定,则使用相应的matplotlib后端,否则它将是matplotlib的默认值(您可以在matplotlib配置文件中进行设置)。
- 可选参数:
- --no-import-all
-
阻止IPython 在交互式名称空间中执行。您可以使用InteractiveShellApp.pylab_import_all可配置来控制此标志的默认行为。
import *
%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
召回率45
将历史记录行45放在下一个输入提示上。使用%hist找出数字。
%召回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'Soft '重置:仅清除您的名称空间,保留历史记录不变。
-
对对象的引用可以保留。默认情况下(不带此选项),我们进行“硬”重置,为您提供一个新会话,并从当前会话中删除对对象的所有引用。
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]正则表达式
如果不包含正则表达式,则不采取任何措施
- 选件
-
-f:不要求确认就强制重置。
也可以看看
reset:调用为
%reset
例子
首先,出于教学上的考虑,我们完全重置了名称空间,因此您的输出与该示例相同。实际上,您不需要完全重置:
In [1]: %reset -f
现在,有了一个干净的名称空间,我们可以创建一些变量,并
%reset_selective
仅用于删除与我们的正则表达式匹配的名称: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 | file ) [args]
文件名之后的参数作为命令行参数传递给程序(放入sys.argv)。然后,控制返回到IPython的提示符。
这类似于在系统提示符下运行,但是具有为您提供IPython的回溯以及将所有变量加载到交互式名称空间中以供进一步使用的优点(除非使用-p,请参见下文)。
python file args
该文件在最初仅由
__name__=='__main__'
和如所示构造的sys.argv 组成的名称空间中执行 。因此,它将环境看作是作为独立程序运行(共享全局对象(如先前导入的模块)除外)。但是执行后,将使用程序中定义的所有变量(__name__和sys.argv除外)更新IPython交互式名称空间。这样可以非常方便地加载用于交互式工作的代码,同时为每个程序提供一个“干净的表”以供运行。使用类似于shell的全局匹配扩展参数。可以使用模式'*','?','[seq]'和'[!seq]'。此外,波浪号“〜”将被扩展到用户的主目录。与实际外壳不同,引号不会抑制扩展。使用 两个反斜杠(例如
\\*
)来抑制扩展。要完全禁用这些扩展,可以使用-G标志。在Windows系统上,
'
不支持在指定文件时使用单引号。使用双引号"
。选项:
- -n
-
__name__不是设置为'__main__',而是运行文件的名称,不带扩展名(就像python在import下一样)。这允许运行脚本并重新加载其中的定义,而无需调用受子句保护的代码。
if __name__ == "__main__"
- -i
-
在IPython的命名空间(而不是空的)中运行文件。如果您要试验用文本编辑器编写的代码,该代码取决于交互式定义的变量,则此功能很有用。
- -e
-
忽略正在运行的脚本中的sys.exit()调用或SystemExit异常。如果使用IPython运行单元测试(总是通过sys.exit()调用退出),这将特别有用。在这种情况下,您对测试结果的输出感兴趣,而不是看到unittest模块的回溯。
- -t
-
在运行结束时打印时间信息。IPython将为您的脚本提供一个估计的CPU时间消耗,在Unix下,它使用资源模块来避免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'(不带引号)才能开始执行到第一个断点。
输入“帮助”将提供有关调试器使用情况的信息。您可以在提示符下通过“ 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的glob扩展。
%save
-
将一组行或宏保存到给定的文件名。
- 用法:
-
%save [选项]文件名n1-n2 n3-n4…n5 .. n6…
选项:
-r:使用“原始”输入。默认情况下,使用“处理过的”历史记录,以便将魔术以其转换后的版本加载到有效的Python中。如果指定了此选项,则将使用按命令行键入的原始输入。
-f:强制覆盖。如果文件存在,除非给出-f,否则%save将提示覆盖。
-a:附加到文件而不是覆盖文件。
此函数对输入范围使用与%history相同的语法,然后将这些行保存到您指定的文件名中。
如果您自己不这样做,则会在文件中添加扩展名“ .py”,并在覆盖现有文件之前要求确认。
如果使用
-r
option,则默认扩展名为.ipy
。
%sc
-
Shell捕获-运行shell命令并捕获输出(不建议使用!)。
已淘汰。次优,保留下来是为了向后兼容。
您应该使用“ var =!command”形式。例:
现在应将“%sc -l myfiles = ls〜”写成
“ myfiles =!ls〜”
myfiles.s,myfiles.l和myfiles.n仍然适用,如下所述。
%sc [选项] varname =命令
IPython将使用commands.getoutput()运行给定的命令,然后使用名为varname的变量更新用户的交互式名称空间,该变量包含调用的值。您的命令可以包含外壳通配符,管道等。
语法中的'='符号是强制性的,您提供的变量名称必须遵循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”)。由于输出为_returned_,因此它将存储在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”)。由于输出为_returned_,因此它将存储在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。
有效模式:普通,上下文,详细和最小。
%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 Note that the time needed by Python to compile the given expression will be reported if it is more than 0.1s. In this example, the actual exponentiation is done by Python at compilation time, so while the expression can take a noticeable amount of time to compute, that time is purely due to the compilation: 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代码代码…
使用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使用单个setup语句来导入函数或创建变量。通常,只要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的目的只是向您显示您手动定义的内容。
例子
定义两个变量,并用谁列出它们:
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
-
异常处理程序的切换模式。
有效模式:普通,上下文,详细和最小。
如果不带参数调用,则用作切换。
细胞魔法
%%bash
-
%% bash脚本魔术
在子流程中使用bash运行单元格。
这是
%%script bash
%%capture
-
%capture [--no-stderr] [--no-stdout] [--no-display] [output]
运行单元格,捕获stdout,stderr和IPython的丰富display()调用。
- 位置参数:
- 输出将在其中存储输出的变量的名称。这是一个
-
具有stdout / err属性的utils.io.CapturedIO对象,用于捕获的输出的文本。CapturedOutput还具有用于显示输出的show()方法以及__call__,因此您可以使用它来快速显示输出。如果未指定,则捕获的输出将被丢弃。
- 可选参数:
- --no-stderr
-
不要捕获stderr。
- --no-stdout
-
不要捕获标准输出。
- --no-display
-
不要捕获IPython的丰富显示。
%%html
-
%html [--isolated]
将单元格渲染为HTML块
- 可选参数:
- --isolated
-
将单元格注释为“隔离”。隔离的单元格呈现在它们自己的<iframe>标记内
%%javascript
-
运行Javascript代码的单元块
%%js
-
运行Javascript代码的单元块
的别名
%%javascript
%%latex
-
将单元格渲染为乳胶块
支持的乳胶子集取决于客户端中的实现。在Jupyter Notebook中,此魔术仅呈现MathJax [here](https://docs.mathjax.org/en/v2.5-latest/tex.html)定义的乳胶子集。
%%markdown
-
将单元格渲染为Markdown文本块
%%perl
-
%% perl脚本魔术
在子过程中使用perl运行单元格。
这是
%%script perl
%%pypy
-
%% pypy脚本魔术
在子进程中使用pypy运行单元格。
这是
%%script pypy
%%python
-
%% python脚本魔术
在子流程中使用python运行单元格。
这是
%%script python
%%python2
-
%% python2脚本魔术
在子进程中使用python2运行单元。
这是
%%script python2
%%python3
-
%% python3脚本魔术
在子进程中使用python3运行单元格。
这是
%%script python3
%%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 管道,而不是stderr文本本身,并且不会自动关闭。
- --out OUT
-
脚本中存储stdout的变量。如果脚本是后台运行的,它将是stdout pipe,而不是stderr文本本身,并且不会自动关闭。
%%sh
-
%% sh脚本魔术
在子流程中使用sh运行单元格。
这是
%%script sh
%%svg
-
将单元格渲染为SVG文字
%%writefile
-
%writefile [-a] filename
将单元格的内容写入文件。
除非指定了-a(–append)标志,否则文件将被覆盖。
- 位置参数:
-
要写入的文件名文件
- 可选参数:
- -a, --append
-
将单元格的内容追加到现有文件。如果文件不存在,将创建该文件。