ipython
install
ipython是一個 python 的交互式 shell,比默認的python shell 好用得多,支持變量自動補全,自動縮進,支持 bash shell 命令,內置了許多很有用的功能和函數。
- cd python\Scripts\
- pip.exe install ipython
- waiting
- c:>ipython
- 進入ipython交互命令行
安裝notebook
pip 安裝pyreadline
easy_install.exe pyzmq
easy_install.exe jinja2
easy_install.exe tornado
ipython notebook
- if no module named notebook.notebookapp
- it need pip install jupyter or pip install –upgrade jupyter
使用
tab鍵自動補齊
在shell中輸入表達式時,只要按下Tab鍵,當前命令控件中任何與輸入的字符串相匹配的變量(對象、函數等)就會被找出來。
ps.之前我發現我的ipython沒有Tab鍵自動補全功能,tab鍵的功能是縮進。最後 pip install pyreadline即可解決。
內省
在變量的前面或後面加上一個問號(?)就可以將有關該對象的一些通用信息顯示出來。這就叫做對象的內省。
如果對象是一個函數或實例方法,則其docstring也會被現實出來。
使用??還將顯示出該函數的源代碼。
一些字符串配以通配符(*)即可顯示出所有與該通配符表達式相匹配的名稱。
例如,我們可以列出Numpy頂級命名空間中含有“load”的所有函數
%run命令
所有文件都可以通過%run
命令當做Python程序來運行
syntax:%run 路徑+python文件名
中斷正在執行的代碼
按下Ctrl-C
就會引發一個KeyboardInterrupt
執行剪貼板中的代碼
使用ctrl+shift+v
將剪貼板的代碼片段粘貼出來,則不需要右鍵粘貼
%paste
可以承載剪貼板中的一切文本,並在shell中以整體形式執行。
%cpaste
跟%paste
差不多,只不過它多出了一個用於粘貼代碼的特殊提示符而已。如果發現粘貼的代碼有錯,只需要按下ctrl+c
即可終止%cpaste
提示。
快捷鍵
- Ctrl-P 或上箭頭鍵 後向搜索命令歷史中以當前輸入的文本開頭的命令
- Ctrl-N 或下箭頭鍵 前向搜索命令歷史中以當前輸入的文本開頭的命令
- Ctrl-R 按行讀取的反向歷史搜索(部分匹配)
- Ctrl-A 將光標移動到行首
- Ctrl-E 將光標移動到行尾
- Ctrl-K 刪除從光標開始至行尾的文本
- Ctrl-U 清除當前行的所有文本
- Ctrl-F 將光標向前移動一個字符
- Ctrl-b 將光標向後移動一個字符
- Ctrl-L 清屏
異常和跟蹤
待補充
魔術命令
%quickref
顯示IPython的快速參考%magic
顯示所有魔術命令的詳細文檔%debug
從最新的異常跟蹤的底部進入交互式調試器%hist
打印命令的輸入(可選輸出)歷史%pdb
在異常發生後自動進入調試器%paste
執行剪貼板中的Python代碼%cpaste
打開一個特殊提示符以便手工粘貼待執行的Python代碼%reset
刪除interactive命名空間中的全部變量/名稱%page OBJECT
通過分頁器打印輸出OBJECT%run script.py
在IPython中執行一個Python腳本文件%prun statement
通過cProfile執行statement,並打印分析器的輸出結果%time statement
報告statement的執行時間%timeit statement
多次執行statement以計算系綜平均執行時間。對那些執行時 間非常小的代碼很有用%who、%who_ls、%whos
顯示interactive命名空間中定義的變量,信息級別/冗餘度可變%xdel variable
刪除variable,並嘗試清除其在IPython中的對象上的一切引用
基於Qt的富GUI控制檯
Ipython團隊開發了一個基於Qt框架(其目的是爲終端應用程序提供諸如內嵌圖片、多行編輯、語法高亮之類的富文本剪輯功能)的GUI控制檯。
ipython qtconsole --pylab=inline
就會進入jupyter QtConsole圖形界面
Jupyter QtConsole 4.2.1
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.
IPython 5.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]:
如果不能啓動的話,pip install qtconsole
matplotlib集成與pylab模式
啓動Ipython時加上–pylab標記來集成matplotlib
進入ipython時候,輸入ipython --pylab
如果顯示 ImportError :No module named matplotlib
只需要安裝matplotlib pip.exe install matplotlib
Matplotlib是一個Python的圖形框架,類似於MATLAB和R語言。
可以圖形化顯示數據
搜索並重用歷史命令
歷史命令用上下箭頭就好啦,ctrl+p和ctrl+n 太麻煩啦。
ctrl+r用於實現部分增量搜索,按下ctrl+r並輸入你想搜索的行中的幾個字符。按下ctrl+r將會循環搜索歷史命令中每一條與輸入相符的行。
輸入和輸出變量
ipython將最近的兩個輸出結果保存在(一個下劃線)和_(兩個下劃線)變量中
輸入的文本被保存在名爲_iX的變量中,其中X是輸入行的行號。比如說,在輸入完27行後,就會產生兩個新變量_27(輸出變量)和_i27(輸入變量)
記錄輸入和輸出
執行%logstart既可開始記錄日誌
與操作系統交互
命令 | 說明 |
---|---|
!cmd | 在系統shell中執行cmd |
output=!cmd args | 執行cmd,並將stdout存放在output中 |
%alias alias_name cmd | 爲系統shell命令定義別名 |
%bookmark | 使用ipython的目錄書籤系統 |
%cd directory | 將系統的工作目錄更改爲directory |
%pwd | 返回系統的當前工作目錄 |
%pushd directory | 將當前目錄入棧,並轉向目標目錄 |
%popd | 彈出棧頂目錄,並轉向目標 |
%dirs | 返回一個含有當前目錄棧的 |
%dhist | 打印目錄訪問歷史 |
%env | 以dict形式返回系統環境變量 |
目錄書籤系統
ipython 保存你常用的目錄的別名,以便是實現快速跳轉到常用的目錄
syntax:%bookmark 別名 /常用的目錄
下次使用:cd 別名
%bookmark -l 顯示所有的目錄書籤
軟件開發工具
交互式調試器
調試代碼的最佳時期之一就是錯誤剛剛發生那會兒。
%debug
命令(在發生異常之後馬上輸入)將會調用哪個“事後調試器”,並直接跳轉到引發異常的那個棧幀(stack frame)
在這個調試器中,可以執行任意python代碼並查看各個棧幀中的一切對象和數據(也就是解釋還“留了條生路”的那些)。
默認從最低級開始的(即錯誤發生的地方)。
輸入u(up)和d(down)即可在棧跟蹤的個級別之間的切換
執行%Pdb命令可以讓ipython在出現異常之後自動調用調試器。
此外,調試器還可以爲代碼開發工作提供幫助,尤其是當你想要設置斷點或對函數、腳本進行單步調試以查看各條語句的執行情況時。實現這個目的的方式有幾個。第一,使用帶有-d選項的%run命令,這將會在執行腳本文件中發代碼之前先打開調試器。必須立即輸入s才能進入腳本:
In[5]:run -d test.py
Breakpoint 1 at d:/test.py:1
NOTE:Enter 'c' at the ipdb>prompt to start your script.
><string>(1)<module>()
ipdb>s
>d:\test.py(1)<module>()
1--->
在此之後,該文件接下來的執行方式就憑你一句話。比如說,在上面的異常中,我們可以調用work_fine方法的地方設置一個斷點,然後輸入c 使腳本一直運行下來直到斷點爲止:
ipdb> b 12 #在腳本的第12行設置斷點
ipdb> c #使腳本一直運行下來直到斷點爲止
這時可以單步進入works_fine()或者執行work_fine()(輸入n直接執行到下一行)
ipdb>n
#執行13行
ipdb>!變量
#可以看變量的信息
測試代碼的執行時間:%time和%timeit
調試器命令
命令 | 功能 |
---|---|
q | 退出調試器 |
b number | 在number行設置斷點 %run -d -b2 test.py 自動在第二行設置一個斷點 |
b path/to/file.py:number | 在指定文件的number行設置斷點 |
s | 單步進入函數調用 |
n | 執行當前行,並且進到當前級別的下一行 |
u/d | 在函數調用棧中向上或向下移動 |
a | 顯示當前函數 |
debug statement | 在新的(遞歸)調試器中調用語句statement |
l | 顯示當前行,以及當前棧級別上的上下文參考 |
w | 打印當前位點完全棧跟蹤(包括上下文參考代碼) |
調試器的其他使用場景
def set_trace():
from IPython.core.debugger import Pdb
Pdb(color_scheme='linux').set_trace(sys._getframe().f_back)
def debug(f,*args,**kwargs):
from IPython.core.debugger import Pdb
pdb=Pdb(color_scheme='linux')
return pdb.runcall(f,*args,**kwargs)
set_trace 將其放在你的代碼中的任何一行你希望停下來查看一番的地方(比如說異常)
按下c使代碼恢復執行,不受影響。
debug是你能夠在任何函數上使用調試器。
def f(x,y,z=1):
tmp=x+y
return tmp/z
假設你寫了一個f函數,相對其進行單步調試。f的正常使用是f(1,2,z=3)爲了能夠單步進入f。我們需要:
In[2]:debug(f,1,2,z=3)
...
ipdb>
測試代碼的執行時間:%time和%timeit
有時候你可能會希望瞭解某個複雜計算過程中到底是哪些函數佔用的時間最多。
ipython專門提供了兩個魔術函數(%time和%timeit)以便自動完成該過程。
%time一次執行一條語句,然後報告總體執行時間。
例子:下面是一個擁有60萬字符串的數組,以及兩個不同的“能夠選出其中以foo開頭的字符串”的方法:
#一個非常大的字符串數組
strings = ['foo','foobar','baz','qux','python','Guido Van Rossum']*100000
method1 = [x for x in strings if x.startswith('foo')]
mathod2 = [x for x in strings if x[:3] == 'foo']
如果你對相同的語句多次執行%time的話,就會發現其結果是會變的
爲了得到更爲精確的結果,需要使用魔術函數%timeit,對於任意語句,它會自動多次執行以產生一個非常精確的平均執行時間。
基本性能分析:%prun和%run -p
python性能分析工具是cprofile模塊,一般在命令行上使用:
python -m cprofile -s cumulative test.py
#-s 標記指定以累積的方式排序規則
在ipython 可以使用%run -p -s cumulative test.py
即可顯示各個函數所耗費的時間,如果一個函數調用了別的函數,計時器是不會停下來重新計時的
cprofile記錄的是各個函數的起始和結束時間
在ipython中可以使用%run -p
或者%prun
舉例:%prun -l 7 -s cumulative 函數() #分析任意函數塊的性能
逐步分析函數性能
IPython 中line_profiler小型庫,用的時候需要啓動該擴展,要進行配置
IPython Notebook
運行在命令行上的輕量級服務器進程,即在web上使用ipython進行命令行操作
quetion:
利用Python進行數據分析第三章