ipython提供了改進的互動式python shell,我們可以利用ipython來執行python語句,並能夠立刻看到結果,這一點跟python自帶的shell工具沒有什麼不同,但是ipython額外提供了很多實用的功能是python自帶的shell所沒有的,下面就來看看這些實用的功能吧。在ipython中執行如下圖:tab自動補全
使用過linux命令列的同學都知道tab自動補全有多實用吧,ipython可以針對之前輸入過的變數,物件的方法等進行自動補全。我們只需要輸入一部分,就可以看到命名空間中所有相匹配的變數,函式等
這個示例顯示了,當輸入mylist. 之後按tab鍵就自動出現的可以使用的method。
tab補全還可以針對檔案路徑進行補全,例如下面的例子在輸入anaconda之後按tab自動顯示路徑下的所有可選路徑
內省在變數的前面或者後面加問號?就可以查詢改物件相關的資訊(簡要資訊),有的時候物件的描述資訊較多時,需要兩個問號??來顯示全部資訊.
魔術命令
魔術命令(magic commands)是ipython提供一整套命令,用這些命令可以操作ipython本身,以及提供一些系統功能。魔術命令分為兩種:一種是基於行的(line-oriented), 命令只針對一行;另一種是基於單元的(cell-oriented), 命令可以針對多行,均作為其引數。
比如:下面這個%timeit魔術命令就是line-oriented
%timeit range(1000)
下面的魔術命令是cell-oriented
%%timeit x = numpy.random.rann((100, 100))
numpy.linalg.svd(x)
注:這裡timeit只針對svd進行測試,不會針對x變數的賦值做測試。
ipython提供了很多類似的魔術命令,如果你想看都有哪些魔術命令,可以通過%lsmagic來查詢,如果想查詢某個命令的詳細資訊,可以通過%cmd?來獲取,例如:%run?
另外,預設情況下automagic是on狀態,也就是說對於line-oriented命令我們不需要使用前面的百分號%,直接輸入命令即可(例如:timeit range(1000) ),但是對於cell-oriented命令我們必須輸入%%,可以通過%automagic來開啟/關閉這個automagic功能。
下面僅就常用的魔術命令做下介紹:
%run 命令
該命令可以直接執行python指令碼,並輸出結果,比如我們有乙個python檔案如下:
# test.py
defmain
"this is a test."
if __name__ == '__main__':
main()
%paste 和 %cpaste命令
我們經常會將python檔案中的**貼上到ipython中執行,以便檢視效果,尤其是針對現實圖形的**。這時如果直接拷貝貼上,ipython可能無法正確的執行,這是因為ipython一旦遇到空行就認為貼上結束,然後就開始執行了。
例如,我們有如下**:
如果直接拷貝貼上到ipython當中,就會報錯,如下:def
add(x, y):
result = x + y
print result
add(1, 2)
這時我們就需要使用%paste或者%cpaste來貼上了,先拷貝**,然後在ipython中輸入%paste,結果如下:
%cpaste也可以貼上**,與%paste區別就是它可以持續貼上(即continue paste),直到我們按ctrl+d或者輸入雙減號"--"以結束貼上
%pdb
用以開啟/關閉自動pdb喚出功能,當我們開啟這個功能的時候(通過%pdb on 或者%pdb 1),程式一旦遇到exception就會自動呼叫pdb,進入pdb互動介面(如果要關閉該功能可以通過%pdb off 或者%pdb 0)
例如我們有乙個test2.py檔案如下:
當我們開啟pdb開關後,執行如下圖所示:def
raise_exception
(): var_before_exception = 1
raise exception("test")
var_after_exception = 2
print var_before_exception
print var_after_exception
raise_exception()
可以發現pdb在raise exception的地方被喚出了。
%edit
用於啟動乙個編輯器。在linux上會啟動vim,在windows上會啟動notepad。我們可以在編輯器上編輯**,儲存退出後就會執行相應**。
!cmd
!後可以跟乙個shell指令,從而在ipython介面就可以直接執行shell指令而不需要再退出ipython了
例如下面執行一條ping命令:
除上述魔術命令外,ipython還提供了很多其它命令,下表列出了常用的一些命令,如果要檢視完整列表,請使用%lsmagic
命令命令說明
%hist
查詢輸入的歷史
%reset
清空namespace
%prun
使用python
profiler執行python**。注:profiler是用於測試**效能的工具
%time
用於顯示python語句的執行時間,包括cpu time和wall clock time
%timeit
用於顯示python語句的執行時間,但是這個命令會多次執行相應的語句(可以指定次數)%timeit只針對一行python語句,如果有多條語句,需要用分號分隔開,同時%%timeit是cell-oriented魔術命令,緊跟在命令後面的語句是作為setup
code的,在cell body中的**才會被timeit多次執行並計算時間
%bookmark
用於儲存常用路徑
%cd進入目錄命令
%env
顯示系統環境變數
%pushd dir
將當前目錄入棧,並進入dir指定的目錄
%popd
彈出棧頂目錄
matplotlib整合和pylab模式
ipython在使用matplotlib庫生成圖形的時候,仍然可以在ipython互動介面輸入和操作,這是它比python shell強大的乙個重要功能點,使得我們在做科學計算的時候,可以更好的與資料互動並視覺化。而要使用此功能,需要在啟動ipython的時候,開啟pylab模式,如下
$ipython --pylab
輸入和輸出
ipython的互動介面提示符分為in和out,in代表輸入並在後面的中括號中帶有行號,如: in [2]:
out代表輸出,同樣也有行號。ipython提供了一下幾種快捷方式方便我們操作輸入和輸出:
● _ 和_: 單下劃線代表上乙個輸出,雙下劃線代表上上個輸出
● _ix和_x: x代表行號,_ix代表第x行的輸入的字串,_x代表輸出的字串
● exec:我們可以利用exec命令來執行歷史的輸入操作
下圖展示了如何利用這些快捷方式更方便的進行輸入和輸出的操作:
鍵盤快捷鍵
ipython提供了類似linux的快捷鍵操作方式,可以方便我們的命令操作
快捷鍵說明
ctrl
+ a游標移到行首
ctrl + e
游標移到行尾
ctrl + k
刪除從游標開始到行尾的字元
ctrl + u
刪除從游標開始到行首的字元
ctrl + r
搜尋匹配的歷史命令
ctrl + p或上箭頭
搜尋之前的歷史命令
ctrl
+ n或下箭頭
搜尋之後的歷史命令
ctrl + l
清屏
為什麼要使用blog
有哥們問我,你為什麼使用blog?我總結了一下,覺得有如下幾個原因。1對自己的督促 有了blog,就會經常記得寫點東西 就會經常翻翻網上的新文章,了解一下新技術,不至於迷失在忙碌的生活中 如果把自己的所感所想所學寫出了,自己對自己也會有個概念,不至於迷迷糊糊 還有,畢竟是掛在網上的文字,心中難免擔心...
為什麼要使用XML
xml 代表擴充套件標記語言 extensible markup language 是由 world wide web consortium w 3c 的 xml工作組定義的。這個工作組是這樣描述該語言的 擴充套件標記語言 xml 是 sgml 的子集,其目標是允許普通的 sgml 在web 上以目...
為什麼要使用Nginx?
有人說這些基準測試是不準確的,因為在這樣那樣的環境下,做的比較不一致。我傾向同意基準測試只是告訴了我們其中一部分情況,你能做的是消除偏見 有人見過所有人都同意乙個基準測試是公平的嗎?我是沒見過。我們投資的一些公司把web平台切換到nginx後,可以顯著的解決擴充套件問題。nginx明顯有效的實現了今...