IPython Notebook 簡介

在 IPython 的官網(ipython.org)上,介紹其的第一句話即是:IPython 是一個增強版的交互式 Shell。另外不少介紹 IPython 的文章也常以這句話開頭,但這句話實在是等於沒說。讓 IPython 在各類 shell(IDE) 中脫穎而出,成爲科學計算標配的,並非按 Tab 鍵代碼補完、以 % 開頭的魔術命令這些你們都有的東西,而是與 matplotlib 這個數據可視化(繪圖)包的深度集成以及奇妙的 Notebook。python

IPython 較早的富 GUI 實現應該是 Qt Console。過去在標準 shell 裏繪圖時,彈出的繪圖窗口會接管 shell 會話的控制權,你想繼續輸入命令就必須先把繪圖窗口關掉。這對於但願同時實現可視化和交互式過程的數據分析用戶來講顯然是難以忍受的,所以 Qt console 站出來解決了這個問題。在 Qt console 中經過 matplotlib 繪製的圖形會獨立嵌於控制檯中,並不影響你繼續輸入命令。git

2011年,由 Brian Granger 領導的 IPython 團隊開始開發一種基於Web技術的交互式計算文檔格式,即 IPython Notebook。爲何說它是文檔格式,而非計算工具呢?實際上它二者都是。Notebook 在交互上使用了 C/S 結構,它經過 Tornado 創建一個 shell 服務器,並使用瀏覽器做爲客戶端。另外 notebook 頁面都被保存爲 .ipynb 的類 JSON 文件格式。這種文件格式也是 Notebook 最吸引人的地方。github

IPython Notebook 更詳細的介紹在下面第二節中給出,第一節講的是一些對 IPython 的各類實現通用的功能。 <br /> #基礎

###Tab 鍵自動完成 和其餘 IDE 差很少,本身多試試就行了 <br /> ###內省 在變量名或命令的前面或後面加一個 「?」 並執行,能夠用於顯示該對象的一些通用信息,如對象類型、文檔字符串等,這就叫作對象內省。這種操做查看到的信息,尤爲是函數和類的信息,比一般直接引用變量名而後回車所看到的(__repr__)要好。「?」 的另外一個用法是能夠搜索 IPython 的命名空間,配合通配符使用效果以下:shell

lang:python
In [1]:import numpy as np
In [2]:np.*load*?
np.load
np.loads
np.loadtxt
np.pkgload

使用雙問號「??」還能夠查看對象的源代碼(若是可見的話)。 <br /> ###魔術命令 在 IPython 的會話環境中,全部文件均可以經過 %run 命令來當作腳本執行,而且文件中的變量也會隨即導入當前命名空間。即,對於一個模塊文件,你對他使用 %run 命令的效果和 from module import * 相同,除非這個模塊文件定義了 main 函數(if __name__ == '__main__:'),這種狀況下 main 函數還會被執行。瀏覽器

這種以 % 開頭的命令在 IPython 中被稱爲魔術命令,用於增強 shell 的功能。經常使用的魔術命令有: <br />安全

<table> <tr> <td>%quickref</td> <td>顯示 IPython 快速參考</td> </tr> <tr> <td>%magic</td> <td>顯示全部魔術命令的詳細文檔</td> </tr> <tr> <td>%debug</td> <td>從最新的異常跟蹤的底部進入交互式調試器</td> </tr> <tr> <td>%pdb</td> <td>在異常發生後自動進入調試器</td> </tr> <tr> <td>%reset</td> <td>刪除 interactive 命名空間中的所有變量</td> </tr> <tr> <td>%run <i>script.py</i></td> <td>執行 <i>script.py</i></td> </tr> <tr> <td>%prun <i>statement</i></td> <td>經過 cProfile 執行對 <i>statement</i> 的逐行性能分析</td> </tr> <tr> <td>%time <i>statement</i></td> <td>測試 <i>statement</i> 的執行時間</td> </tr> <tr> <td>%timeit <i>statement</i></td> <td>屢次測試 <i>statement</i> 的執行時間並計算平均值</td> </tr> <tr> <td>%who、%who_ls、%whos</td> <td>顯示 interactive 命名空間中定義的變量,信息級別/冗餘度可變</td> </tr> <tr> <td>%xdel <i>variable</i></td> <td>刪除 <i>variable</i>,並嘗試清除其在 IPython 中的對象上的一切引用</td> </tr> <tr> <td>!<i>cmd</i></td> <td>在系統 shell 執行 <i>cmd</i></td> </tr> <tr> <td>output=!<i>cmd args</i></td> <td>執行<i>cmd</i> 並賦值</td> </tr> <tr> <td>%bookmark</td> <td>使用 IPython 的目錄書籤系統</td> </tr> <tr> <td>%cd <i>direcrory</i></td> <td>切換工做目錄</td> </tr> <tr> <td>%pwd</td> <td>返回當前工做目錄(字符串形式)</td> </tr> <tr> <td>%env</td> <td>返回當前系統變量(以字典形式)</td> </tr> </table> <br /> 對魔術命令不熟悉的話能夠經過 `%magic` 查看詳細文檔;對某一個命令不熟悉的話,能夠經過 `%cmd?` 內省機制查看特定文檔。值得一提的是,IPython 中使用 `del` 命令沒法刪除全部的變量引用,所以垃圾回收機制也沒法啓用,因此有些時候你會須要使用 `%xdel` 或者 `%reset`。 <br /> ###歷史輸入和輸出變量 與標準 Shell 相似,IPython 中也能夠經過 `_` 和 `__` 訪問上一次和上上一次的輸出。同時你確定注意到了,IPython 中每一次的輸入輸出都有序號。訪問歷史 X 行輸出的方法爲:`_X`;訪問歷史 X 行輸入的方法爲:`_iX`。由於訪問歷史輸出的使用機率較歷史輸入大不少,因此訪問歷史輸出僅使用下劃線加行號便可,同時爲了區分,訪問歷史輸入時需添加小寫字母 「i」,表明 「in」。服務器

lang:Python
In [24]:1+1
Out[24]:2

In [25]:_i24
Out[25]:'1+1'

In [26]:_24
Out[26]:2

<br /> #Notebook --- Notebook 的官方信息能夠從 ipython.org/notebook 得到,不過好像被牆了。上不去的話也能夠訪問它的 github 頁面,ipython/examples/Notebook 目錄下有不少可供參考的內容。前面說過 Notebook 有一種 .ipynb 的文件格式,當你打開這個例程目錄下的某個文件後,就能體會到 Notebook 的奇妙之處了。 <br /> ###演示文檔 目前在各類 Python 研討會上,一種流行的演示手段就是使用 IPython Notebook,而後再將 .ipynb 文件發佈到網上以供全部人查閱。除了前面說過的能夠內嵌 matplotlib 繪圖外,Notebook 還同時提供了對 LaTex 和 MarkDown 的支持!markdown

在此輸入圖片描述

如上圖便展現了一個 .ipynb 文件的示例頁面。其中一對 In Out 會話被視做一個單元,稱爲 cell。第一個 cell 裏我寫入的內容實際上是:函數

##LaTex 演示
---
$Z=\frac{X-\bar{X}}{S}$

分別使用了 MarkDown 和 LaTex 的語法。按下 Shift + Enter 後這段內容就被渲染成了圖片中的樣子。工具

cell 特別親切的地方在於:它能夠做爲一個相似「段落」的概念來進行編輯,不論是執行前仍是執行後,並且既能夠針對內容進行編輯,也能夠對 cell 總體應用 copy、paste、cut 等操做,甚至還能夠先後移動 cell 的位置。這帶來的好處是,在大量試驗性的交互操做事後,他不會像普通 shell 那樣留下無數沒用的 IO 內容。若是某條命令的輸出不理想或者報了錯,你就能夠回頭編輯後從新運行,或把它移位或乾脆刪掉。這樣在好久的一段交互過程後,Notebook 留下的反而是一份乾淨整潔的文檔。

.ipynb 文件使用的是一種類 JSON 的文本格式,就像這樣:

"worksheets": [
	{
		"cells": [
			{
				"cell_type": "markdown",
				"metadata": {},
				"source": [
					"##LaTex \u6f14\u793a\n",
					"---\n",
					"$Z=\\frac{X-\\bar{X}}{S}$"
				]
			},

這種交互式計算環境,對繪圖、數學公式、簡易排版語法的支持,還有一種方便的文檔格式,共同幫助 Notebook 成爲了 Python 科學計算的理想工具。另外這種使用瀏覽器和服務進程的 C/S 結構還暗含了一種遠程鏈接可能,拋開安全性不談的話,其在教學方面也有很高的潛力。 <br /> ###操做指南 當經過 IPython Notebook.exe 進入應用時,首先打開的是 Home 頁面,地址通常爲:http://127.0.0.1:8888/tree。Home 目錄下會列出全部的歷史文件記錄,右上角則有一個 「New Notebook」 按鈕能夠新建一個會話。

在 .ipynb 文件的交互頁面,須要注意的除了標準的 IPython 語法外,就是頁面擡頭處的菜單欄和工具欄了。Notebook 很貼心地提供了很是友好的幫助頁面,所以本文再也不贅述。基本看完這兩個頁面(內容不多)後就能對 Notebook 的操做方式瞭解的差很少。

在此輸入圖片描述

相關文章
相關標籤/搜索