IPython上手學(xué)習(xí)筆記

IPython上手學(xué)習(xí)筆記

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)格...)

......爽到爆!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末克握,一起剝皮案震驚了整個濱河市颈渊,隨后出現(xiàn)的幾起案子深寥,更是在濱河造成了極大的恐慌,老刑警劉巖镀梭,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件令野,死亡現(xiàn)場離奇詭異贮勃,居然都是意外死亡魔眨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門容达,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古涧,“玉大人,你說我怎么就攤上這事花盐∠刍” “怎么了菇爪?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柒昏。 經(jīng)常有香客問我凳宙,道長,這世上最難降的妖魔是什么职祷? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任氏涩,我火速辦了婚禮,結(jié)果婚禮上有梆,老公的妹妹穿的比我還像新娘是尖。我一直安慰自己,他們只是感情好泥耀,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布饺汹。 她就那樣靜靜地躺著,像睡著了一般痰催。 火紅的嫁衣襯著肌膚如雪兜辞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天夸溶,我揣著相機(jī)與錄音逸吵,去河邊找鬼。 笑死缝裁,一個胖子當(dāng)著我的面吹牛扫皱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捷绑,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼啸罢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胎食?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤允懂,失蹤者是張志新(化名)和其女友劉穎厕怜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕾总,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粥航,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了生百。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片递雀。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚀浆,靈堂內(nèi)的尸體忽然破棺而出缀程,到底是詐尸還是另有隱情搜吧,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布杨凑,位于F島的核電站滤奈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撩满。R本人自食惡果不足惜蜒程,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伺帘。 院中可真熱鬧昭躺,春花似錦、人聲如沸伪嫁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礼殊。三九已至驹吮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晶伦,已是汗流浹背碟狞。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婚陪,地道東北人族沃。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像泌参,于是被迫代替她去往敵國和親脆淹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容