Learning IPython for Interactive Computing and Data Visualization這本書的前兩章的筆記, 這本書還被放在了IPython官網(wǎng)上, 雖然只有一百頁多一點(diǎn)點(diǎn), 但是講的內(nèi)容卻很豐富, 介紹了IPython, numpy, pandas以及并行計(jì)算等方面.
(在開始系統(tǒng)學(xué)IPython之前簡單使用過IPython, 那時候我還是更喜歡bpython的代碼提示功能...)
ch1: 10 IPython essentials
在任何變量后面加問號?或者雙問號??, 將會輸出詳細(xì)的信息(按q退出),??的信息更加詳細(xì)些
Tab Completion: 沒啥好說的 沒有bpython做的好 也湊合吧...
_, __, ___保存最近三次的輸出;_i, __i, ___i保存最近三次的輸入(作為字符串保存)
magic commands
在IPython里面可以使用一些標(biāo)準(zhǔn)unix命令, 比如cd,pwd,ls等...
這個太好了 否則還要import os, 然后再什么os.chdir('...')
其實(shí)這些unix命令是IPython的magic commands, 這些magic commands一般用%作為前綴.
但是由于默認(rèn)IPython開啟了automagic system, 上面那些命令可以不用加前綴了(或者使用Tab自動給加上前綴)
%run命令, 運(yùn)行一個.py腳本, 但是好處是, 與運(yùn)行完了以后這個.py文件里的變量都可以在Ipython里繼續(xù)訪問
%timeit命令, 可以用來做基準(zhǔn)測試(benchmarking), 測試一個命令(或者一個函數(shù))的運(yùn)行時間
%debug命令: 當(dāng)有exception的時候, 在console里輸入%debug即可打開debugger.
在debugger里, 輸入u,d(up, down)查看stack, 輸入q退出debugger
使用%pdb開啟自動pdb模式
%pdb
Automatic pdb calling has been turned ON
%pylab命令, 大殺器, 看一下都import了什么:
畫圖的時候可以不用非要加plt.前綴了, 直接plot()即可. 圖像化出來的時候, 畫圖窗口并沒有block, 可以動態(tài)(interactively)畫圖.
另外, qtconsole和notebook一樣, 指定了inline選項(xiàng)以后可以直接在窗口里畫圖:
后來發(fā)現(xiàn)inline的圖片貌似不能放大看, 所以有時候還是單獨(dú)一個窗口比較好, 換到非inline模式只需要再輸入以下%pylab, 加上選項(xiàng)qt:%pylab qt
IPython Notebook
(重頭戲)
這個可以在瀏覽器里(!!)使用IPython, 并且可以使用多行編輯后再一并執(zhí)行.
The Notebook brings the functionality of IPython into the browser for multiline textediting features, interactive session reproducibility, and so on.
在shell/cmd窗口里啟動ipython的時候加上notebook:
$ipython notebook
看到瀏覽器打開了, 很神奇:
新建一個notebook, 用用看:
使用的過程中漸漸理解了為什么書里說可以用來做"multiline textediting features, interactive session reproducibility"... 因?yàn)檫@不只是個編程的東西, 還可以作為一個筆記本 — 而且是一個交互式的筆記本!
(注: 更多關(guān)于notebook的介紹在下面第二章的內(nèi)容里.)
代碼,或者段落, 按照cell(格子)進(jìn)行組織, 一個cell里面的內(nèi)容可以是code, 但是也同樣可以是markdown的段落, 或者是一個標(biāo)題(heading).
在一個代碼的cell里, 寫入多行代碼, 就像在編輯器里寫python程序一樣, 按回車只會換行, 不會運(yùn)行程序.
寫了一段程序代碼以后, 按ctrl+Enter運(yùn)行程序, 運(yùn)行結(jié)果也是一個作為cell. (注: 在qtconsole里面相反, 如果要輸入多行程序的話, 按Ctrl+Enter換行(按一一次ctrl+enter即可進(jìn)入多行編輯模式), 寫了幾行代碼以后要運(yùn)行的話, 就按兩次回車, 或者按Shift+Enter)
...還有好多快捷鍵, 按Esc以后再按h就可以看到... 這個還分編輯模式和命令模式呢... 真不能小看了IPython了!
customizing IPython
保存自己的IPython配置文件, 只需要在shell/cmd里輸入ipython profile create,配置文件存儲在~.ipython或者~/.config/ipython目錄里.
ch2: Interavtive Work with IPython
IPython可以實(shí)現(xiàn)shell(OS)和python的交互. 這樣做一些unix shell的操作的時候可以不必退出console了.
navigating the file system
例子: 完成下載壓縮包, 解壓縮, 以及打開解壓后的文件這些操作...
在py變量前面加入$, 可以把這個變量共享給OS或者magic command:
folder='data'%mkdir$folder
這樣就在當(dāng)前目錄下建立一個'data'文件夾 — 這可比py的命令好記多了啊...%mkdir的原理其實(shí)是給了shell命令一個別名(alias).
然后,%bookmark可以把當(dāng)前的目錄加入收藏夾 下次cd的時候方便直接跳到這里來:
ex.%bookmark bm那么以后可以直接用cd bm跳到這個目錄下.%bookmark -l可以列出收藏夾的目錄內(nèi)容.
然后發(fā)現(xiàn)原來IPython連文件名都是可以提示的啊!...
with open('0<tab>
0.circles 0.edges
Accessing system shell with IPython
在IPython里調(diào)用系統(tǒng)的命令, 不用再使用sys.exec('...')之類冗長的方式了, 只需要在系統(tǒng)的命令前面加上一個感嘆號!即可...
shell返回的結(jié)果可以作為一個string的列表保存在一個python variable里.
(當(dāng)然 上面這一行只能在unix系統(tǒng)下運(yùn)行, 因?yàn)閃indows的cmd沒有l(wèi)s 和 grep命令)
還可以把一條比較長的命令作為alias保存起來, 用%alias命令... (這個應(yīng)該一般用不到)
%alias largest ls -1sSh | grep %s
The Extended Python Console
%history或者%hist, 顯示之前的記錄, 有一些參數(shù)可用...
%store把python變量的內(nèi)容保存下來, 以后的session可以用
%paste導(dǎo)入并執(zhí)行剪貼板里面的內(nèi)容
%run之前講過了, 運(yùn)行py文件, 運(yùn)行后py文件里的變量可以在console里訪問
%edit打開系統(tǒng)的文件編輯器, 并且在關(guān)閉這個編輯器時自動運(yùn)行程序
介紹了一個包 networkx, 可以用來分析復(fù)雜網(wǎng)絡(luò)(graph)的....
debug
debug加入斷點(diǎn):%run -d -b29 script.py運(yùn)行script.py 并且在29行的時候暫停, 當(dāng)輸入c的時候再繼續(xù)運(yùn)行.
一些pdb(debugging環(huán)境)里常用的命令:
u/d for going up/down into the call stack
s to step into the next statement
n to continue execution until the next line in the current function
r to continue execution until the current function returns
c to continue execution until the next breakpoint or exception
p to evaluate and print any expression
a to obtain the arguments of the current functions
The!prefix to execute any Python command within the debugger
benchmarking("基準(zhǔn)測試")
%time it fun()測試一個函數(shù)的執(zhí)行速度
%run -t和%timeit效果類似, 作用是測試一個py腳本文件的執(zhí)行速度
更精細(xì)的運(yùn)行時間測試, 可以用profile模塊
The profiler outputs details about calls of every Python function used directly or indirectly in this script.
@@...好高級!!! 這樣的話就更容易發(fā)現(xiàn)程序運(yùn)行的瓶頸在哪里了! 方法是使用%run -p或者%prun
Using the IPython notebook
這個notebook的功能實(shí)在是很NB... 不僅可以加入代碼/markdown段落, 還可以加入圖片和視頻... notebook的格式為.ipybn文件, 用JSON存儲數(shù)據(jù).
輸入ipython notebook(或者在ipython里輸入!ipython notebook)以后, 會在8888端口建立一個web server, 訪問http://localhost:8888/就可以看到上面的那個截圖, 或者稱之為notebook dashboard.
cell magics的作用域是整個cell(多行), 而magic command的作用域是一行, cell magics的前綴是兩個百分號%%.
從一個py文件直接建立一個notebook, 只需要把文件拖入dashboard即可, 然后notebook也可以保存為文件.
編輯了Markdown以后, 還是Ctrl+Enter/Shift+Enter, 即可成為格式化的文本, 再雙擊就可以編輯!!
讓plot的圖片直接嵌入在notebook里面: 使用ipython notebook --pylab inline, 或者在notebook里面輸入%pylab inline
notebook的一些快捷鍵
Esc從編輯模式(edit mode)退出到命令模式(command mode)
Enter從命令模式到編輯模式
(編輯模式下)
ctrl+Enter: 運(yùn)行程序/markdown代碼
shift+Enter: 運(yùn)行程序, 并自動跳到下一個cell
alt+Enter: 運(yùn)行程序, 并自動在后面新建一個cell在
(命令模式下)
c: 復(fù)制一個cell
x: 剪切一個cell
v: 粘貼cell
a: 在當(dāng)前cell上面(above)新建一個cell
b: 在當(dāng)前cell下面(below)新建一個cell
m: 讓當(dāng)前cell變成一個markdown的cell
y: 讓當(dāng)前cell變成code的cell
1,2,3...: n級標(biāo)題
j,k: 上下移動選中的cell, vim風(fēng)格..
dd(d按兩下): 刪除一個cell(vim 風(fēng)格...)
......爽到爆!!