IPython提供了改進(jìn)的交互式Python Shell灾搏,我們可以利用IPython來執(zhí)行Python語句泄伪,并能夠立刻看到結(jié)果忽你,這一點(diǎn)跟Python自帶的shell工具沒有什么不同,但是IPython額外提供了很多實(shí)用的功能是Python自帶的shell所沒有的臂容,下面就來看看這些實(shí)用的功能吧科雳。
Tab自動(dòng)補(bǔ)全
使用過Linux命令行的同學(xué)都知道tab自動(dòng)補(bǔ)全有多實(shí)用吧,IPython可以針對之前輸入過的變量脓杉,對象的方法等進(jìn)行自動(dòng)補(bǔ)全糟秘。我們只需要輸入一部分,就可以看到命名空間中所有相匹配的變量球散,函數(shù)等
這個(gè)示例顯示了尿赚,當(dāng)輸入mylist. 之后按tab鍵就自動(dòng)出現(xiàn)的可以使用的method。
tab補(bǔ)全還可以針對文件路徑進(jìn)行補(bǔ)全蕉堰,例如下面的例子在輸入Anaconda之后按tab自動(dòng)顯示路徑下的所有可選路徑
內(nèi)省
在變量的前面或者后面加問號?就可以查詢改對象相關(guān)的信息(簡要信息)凌净,有的時(shí)候?qū)ο蟮拿枋鲂畔⑤^多時(shí),需要兩個(gè)問號??來顯示全部信息.
魔術(shù)命令
魔術(shù)命令(magic commands)是IPython提供一整套命令屋讶,用這些命令可以操作IPython本身冰寻,以及提供一些系統(tǒng)功能。魔術(shù)命令分為兩種:一種是基于行的(line-oriented), 命令只針對一行皿渗;另一種是基于單元的(cell-oriented)斩芭, 命令可以針對多行轻腺,均作為其參數(shù)。
比如:下面這個(gè)%timeit魔術(shù)命令就是line-oriented
%timeit range(1000)
下面的魔術(shù)命令是cell-oriented
%%timeit x = numpy.random.rann((100, 100))
numpy.linalg.svd(x)
注:這里timeit只針對svd進(jìn)行測試划乖,不會(huì)針對x變量的賦值做測試贬养。
IPython提供了很多類似的魔術(shù)命令,如果你想看都有哪些魔術(shù)命令琴庵,可以通過%lsmagic來查詢误算,如果想查詢某個(gè)命令的詳細(xì)信息,可以通過%cmd?來獲取迷殿,例如:%run?
另外尉桩,默認(rèn)情況下automagic是ON狀態(tài),也就是說對于line-oriented命令我們不需要使用前面的百分號%贪庙,直接輸入命令即可(例如:timeit range(1000) ),但是對于cell-oriented命令我們必須輸入%%翰苫,可以通過%automagic來打開/關(guān)閉這個(gè)automagic功能止邮。
下面僅就常用的魔術(shù)命令做下介紹:
%run 命令
該命令可以直接執(zhí)行python腳本,并輸出結(jié)果奏窑,比如我們有一個(gè)python文件如下:
# test.py
def main():
print "this is a test."
if __name__ == '__main__':
main()
在IPython中執(zhí)行如下圖:
%paste 和 %cpaste命令
我們經(jīng)常會(huì)將python文件中的代碼粘貼到IPython中執(zhí)行导披,以便查看效果,尤其是針對現(xiàn)實(shí)圖形的代碼埃唯。這時(shí)如果直接拷貝粘貼撩匕,IPython可能無法正確的執(zhí)行,這是因?yàn)镮Python一旦遇到空行就認(rèn)為粘貼結(jié)束墨叛,然后就開始執(zhí)行了止毕。
例如,我們有如下代碼:
def add(x, y):
result = x + y
print result
add(1, 2)
如果直接拷貝粘貼到IPython當(dāng)中漠趁,就會(huì)報(bào)錯(cuò)扁凛,如下:
這時(shí)我們就需要使用%paste或者%cpaste來粘貼了,先拷貝代碼闯传,然后在IPython中輸入%paste谨朝,結(jié)果如下:
%cpaste也可以粘貼代碼,與%paste區(qū)別就是它可以持續(xù)粘貼(即continue paste)甥绿,直到我們按Ctrl+D或者輸入雙減號"--"以結(jié)束粘貼
%pdb
用以打開/關(guān)閉自動(dòng)pdb喚出功能字币,當(dāng)我們打開這個(gè)功能的時(shí)候(通過%pdb on 或者%pdb 1),程序一旦遇到exception就會(huì)自動(dòng)調(diào)用pdb共缕,進(jìn)入pdb交互界面(如果要關(guān)閉該功能可以通過%pdb off 或者%pdb 0)
例如我們有一個(gè)test2.py文件如下:
def raise_exception():
var_before_exception = 1
raise Exception("test")
var_after_exception = 2
print var_before_exception
print var_after_exception
raise_exception()
當(dāng)我們打開pdb開關(guān)后洗出,執(zhí)行如下圖所示:
可以發(fā)現(xiàn)pdb在raise exception的地方被喚出了。
%edit
用于啟動(dòng)一個(gè)編輯器图谷。在Linux上會(huì)啟動(dòng)vim共苛,在Windows上會(huì)啟動(dòng)notepad判没。我們可以在編輯器上編輯代碼,保存退出后就會(huì)執(zhí)行相應(yīng)代碼隅茎。
澄峰!cmd
!后可以跟一個(gè)shell指令辟犀,從而在IPython界面就可以直接執(zhí)行shell指令而不需要再退出IPython了
例如下面執(zhí)行一條ping命令:
除上述魔術(shù)命令外俏竞,IPython還提供了很多其它命令,下表列出了常用的一些命令堂竟,如果要查看完整列表魂毁,請使用%lsmagic
命令 | 命令說明 |
---|---|
%hist | 查詢輸入的歷史 |
%reset | 清空namespace |
%prun | 使用Python profiler運(yùn)行python代碼。注:profiler是用于測試代碼性能的工具 |
%time | 用于顯示Python語句的執(zhí)行時(shí)間出嘹,包括cpu time和wall clock time |
%timeit | 用于顯示Python語句的執(zhí)行時(shí)間席楚,但是這個(gè)命令會(huì)多次執(zhí)行相應(yīng)的語句(可以指定次數(shù))%timeit只針對一行Python語句,如果有多條語句税稼,需要用分號分隔開烦秩,同時(shí)%%timeit是cell-oriented魔術(shù)命令,緊跟在命令后面的語句是作為setup code的郎仆,在cell body中的代碼才會(huì)被timeit多次執(zhí)行并計(jì)算時(shí)間 |
%bookmark | 用于存儲(chǔ)常用路徑 |
%cd | 進(jìn)入目錄命令 |
%env | 顯示系統(tǒng)環(huán)境變量 |
%pushd dir | 將當(dāng)前目錄入棧只祠,并進(jìn)入dir指定的目錄 |
%popd | 彈出棧頂目錄 |
matplotlib集成和pylab模式
IPython在使用matplotlib庫生成圖形的時(shí)候,仍然可以在IPython交互界面輸入和操作扰肌,這是它比Python shell強(qiáng)大的一個(gè)重要功能點(diǎn)抛寝,使得我們在做科學(xué)計(jì)算的時(shí)候,可以更好的與數(shù)據(jù)交互并可視化曙旭。而要使用此功能盗舰,需要在啟動(dòng)IPython的時(shí)候,開啟pylab模式桂躏,如下
$ipython --pylab
輸入和輸出
IPython的交互界面提示符分為In和Out岭皂,In代表輸入并在后面的中括號中帶有行號,如: In [2]:
Out代表輸出沼头,同樣也有行號爷绘。IPython提供了一下幾種快捷方式方便我們操作輸入和輸出:
● _ 和_: 單下劃線代表上一個(gè)輸出,雙下劃線代表上上個(gè)輸出
● _iX和_X: X代表行號进倍,_iX代表第X行的輸入的字符串土至,_X代表輸出的字符串
● exec:我們可以利用exec命令來執(zhí)行歷史的輸入操作
下圖展示了如何利用這些快捷方式更方便的進(jìn)行輸入和輸出的操作:
鍵盤快捷鍵
IPython提供了類似Linux的快捷鍵操作方式,可以方便我們的命令操作
快捷鍵 | 說明 |
---|---|
Ctrl + A | 光標(biāo)移到行首 |
Ctrl + E | 光標(biāo)移到行尾 |
Ctrl + K | 刪除從光標(biāo)開始到行尾的字符 |
Ctrl + U | 刪除從光標(biāo)開始到行首的字符 |
Ctrl + R | 搜索匹配的歷史命令 |
Ctrl + P或上箭頭 | 搜索之前的歷史命令 |
Ctrl + N或下箭頭 | 搜索之后的歷史命令 |
Ctrl + L | 清屏 |
總而言之猾昆,IPython為我們提供了很多強(qiáng)大的功能陶因,本篇文章只是簡要概述了下IPython的強(qiáng)大之處,還有很多有待大家自己去探索垂蜗,尤其值得一提的是IPython還提供了notebook功能楷扬,也非常強(qiáng)大解幽,由于篇幅所限,大家可以自己在網(wǎng)上搜索相關(guān)文章來參考烘苹。