原文: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
-
將單元格的內容追加到現有文件。如果文件不存在,將創建該文件。