IPython note (2)
Contents
第一集連結
http://psvsps2.blogspot.com/2009/05/ipython-study-note-1_25.html
doctest mode
doctest 是一個很棒的測試module,結合測試和說明加上直譯器驗證,想再Ipython 裡面產生 doctest 可以接受的測試程式碼,可以輸入 %doctest_mode
In [180]: %doctest_mode
*** Pasting of code with ">>>" or "..." has been enabled.
Exception reporting mode: Plain
Doctest mode is: ON
>>>
Input Cache System
IPython 會保存使用者的輸入和輸出資料 In/Out 簡單查看 In 和 Out 這兩個 list 就可了解他是幹嘛的了。
Input Cache 有定義一些 global object 請參考下面:
- _i : 上一個輸入
- _ii : 上上個輸入
- _i14 : In[14]
- %hist
_i 系列可以自由當成一般變數使用,比如拿來當字串列印:
In [145]: print ' [ '+_i142 + ' ] '
[ _ip.magic("hist -g .*m1")
]
Search
%hist -g regex-string 可以收尋 In[] 並找出符合 regex-string 的內容。 在使用長時間後想要找出相關輸入時會有幫助。
Exception
Python 丟出的exception因為會把整個進入function的堆疊依順序全部丟 出來,老實說就是丟了一大堆廢話,這點在IPython就有很明顯的改善, IPython不會丟出一推繁瑣的函式間的堆疊關係,除此之外還可以透過magic function xmode來設定exception的輸出。
- xmode
- 設定Exception的輸出,有三種模式可以選擇分別是plain,verbose 和context,簡單來說plain呈現的資訊最少,context次之,verbose 最多,建議使用context比較能清楚了解exception發生地點的上下文關 係。
Debug
IPython 對於Debug也有一些方便的支援,沒有使用IPython的時候想要debug 程式,要在souce裡面加入pdb的code來執行pdb,如下例所示:
import pdb
a = 'message A'
pdb.set_trace()
# ...
IPython就不用這麼麻煩了,首先他有一個好用的magic function -> %pdb ,這個magic function可以打開/關閉IPython的automatic pdb功能,如果 automatic pdb = on,在exception丟出時候會自動執行pdb。
此外還可以配合%run -d來進入debug模式:
In [61]: run -d epdb1.py
Breakpoint 1 at /Users/janaustin/Code/python/epdb1.py:1
NOTE: Enter 'c' at the ipdb> prompt to start your script.
> <string>(1)<module>()
ipdb> l
ipdb> n
> /Users/janaustin/Code/python/epdb1.py(1)<module>()
1---> 1 a='aaa'
2 b='bbb'
3 c='ccc'
Paste
在Note (1)有提到IPython可以透過%edit開啟外部編輯器來幫助輸入code, 可是寫程式除了用手慢慢打,剪下貼上也是十分常用的技能,IPython如果要貼上 程式片段,必須先下指令%cpaste進入剪貼模式,貼完後輸入'--'離開剪貼模式。
評估程式
有時候想要對程式的效率進行評估,IPython也貼新的提供可用的功能。
- %time
計算執行的時間。
In [62]: %time sum(range(999999)) CPU times: user 0.27 s, sys: 0.02 s, total: 0.29 s Wall time: 0.29 s Out[63]: 499998500001L
- %timeit
計算平均執行時間。
In [64]: %timeit sum(range(999999)) 10 loops, best of 3: 277 ms per loop
沒有留言:
張貼留言