為什麼要使用IPython?

2021-08-14 23:10:18 字數 4117 閱讀 1925

ipython提供了改進的互動式python shell,我們可以利用ipython來執行python語句,並能夠立刻看到結果,這一點跟python自帶的shell工具沒有什麼不同,但是ipython額外提供了很多實用的功能是python自帶的shell所沒有的,下面就來看看這些實用的功能吧。

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

():print

"this is a test."

if __name__ == '__main__':

main()

在ipython中執行如下圖:

%paste 和 %cpaste命令

我們經常會將python檔案中的**貼上到ipython中執行,以便檢視效果,尤其是針對現實圖形的**。這時如果直接拷貝貼上,ipython可能無法正確的執行,這是因為ipython一旦遇到空行就認為貼上結束,然後就開始執行了。

例如,我們有如下**:

def

add(x, y):

result = x + y

print result

add(1, 2)

如果直接拷貝貼上到ipython當中,就會報錯,如下:

這時我們就需要使用%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檔案如下:

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開關後,執行如下圖所示:

可以發現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明顯有效的實現了今...