版權聲明

所有的部落格文章都可以在右邊[blog文章原始檔案]下載最原始的文字檔案,並依你高興使用 docutil 工具轉換成任何對應的格式方便離線閱覽,除了集結成書販賣歡迎任意取用,引用

IPython study Note (1)

IPython study Note (1)

IPython的筆記,不確定哪時會寫(2)...

Magic Function

IPython 提供的好用特殊指令,想要知道提供的所有指令可以下達lsmagic,所有的magic function 在呼叫的時候請使用百分比'%'開頭,在global沒有名稱重複的情形下可以省略%。

Ex:無覆蓋pwd和有覆蓋pwd的情形

In [37]: pwd
Out[37]: '/Users/janaustin/Code/xxx'

In [38]: %pwd
Out[38]: '/Users/janaustin/Code/xxx'

In [39]: pwd=123

In [40]: pwd
Out[40]: 123

取得說明

學習任何一項事務說明文件要怎樣取得都是重要的,IPython中可以直接在單字後面加上'?'問號來取得 說明,也可以加上2個問號'??' 來取得更詳細的說明。

In [18]: lsmagic?
Type:                Magic function
Base Class:  <type 'instancemethod'>
String Form: <bound method InteractiveShell.magic_lsmagic of <IPython.iplib.InteractiveShell object at 0x484ff0>>
Namespace:   IPython internal
File:                /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/Magic.py
Definition:  lsmagic(self, parameter_s='')
Docstring:
    List currently available magic functions.
%quickref
取得IPython的簡易說明。
%magic
取得magic的簡單說明。
help()
輸入指令help(),可以進入IPython一標題分類的說明系統,進入後輸入topic可以看到所有的 標題,在依照自己喜好深入閱讀。
help('標題')
直接跳至IPython提供的說明文件,比如help('for')
pdef funname

看函數的定義

In [13]: import re

In [14]: pdef re.match
 re.match(pattern, string, flags=0)
pdoc

顯示簡短的物件說明,(?說明的Description部份)

In [22]: pdoc os.path
Common operations on Posix pathnames.

Instead of importing this module directly, import os and refer to
this module as os.path.  The "os.path" name is an alias for this
module on Posix systems; on other systems (e.g. Mac, Windows),
os.path provides the same operations in a manner specific to that
platform, and is an alias to another module (e.g. macpath, ntpath).

Some of this can actually be useful on non-Posix systems too, e.g.
for manipulation of the pathname component of URLs.
pinfo obj
提供精確的定義和說明,和?提供的內容一致。
psource obj

顯示obj的source code。 (??說明的Source欄位)

In [26]: psource os.path.isdir
        def isdir(path):
            """Test whether a path is a directory"""
            try:
                st = os.stat(path)
            except os.error:
                return False
            return stat.S_ISDIR(st.st_mode)
pfile obj
直接開啟obj所在的檔案內容。

Local Variable相關的magic function

IPython 提供不少magic function幫助我們處理己定義的物件,像小弟使用這種直譯器的時候 常常卯起來亂設一些臨時的變數或是物件,這時候知道這些magic function有時候還滿有用的。

<tab>
IPython 執行時會自動載入<tab>補完功能,這個功能有涵蓋到區域變數和物件,對於懶得 打字的朋友算是滿有幫助的。
alias
和shell一樣的設定alias機制,可以設定系統指令。
who
列出所有存活的變數或是物件。
whos
列出所有存活的變數或是物件並提供更多資訊。
store
可以把變數或別名(alias)儲存起來,下次可以繼續使用,保存後改變的資料必須要在一次執行 store 指令,不然不會一起保存。
reset
將環境設定到一開始的執行狀態。
psearch
支援wildcard的收尋方式尋找變數或是物件。

外部Editor

IPython的設計者十分了解一個老練優秀的程式員一定要配上專用的Editor才能發揮最大的威力, 像我就一定要使用Vim或是emacs不然給我textmate也行,當然拉如果要開發cocoa程式我也接受 xcode...看來我並非老練優秀的程式員。

IPython 有一個edit的magic function,可以幫你開啟外部的editor,好吧開啟外部的editor 並沒什麼了不起的,當然他的特異功能不只這樣拉,待小弟慢慢道來。

改變預設的Editor

如果有設定環境變數 $EDITOR,IPython會依據$EDITOR的設定開啟外部編輯器,如果沒有設定 Linux/OSX會開啟VIM,Windows會打開小作家....別人怎麼想我是不知道拉,開小作家叫我打 程式還不如開個檔案說明我沒有設定喜歡的編輯器並且叫我設定,其實假如可以根本應該在安裝的 時候檢查有沒有gvim,ultraedito這些編輯器才對,開小作家真的太汙辱人惹...

OK這邊教你如何改變Windows竟然打開小作家的窘境,這邊的改法其實linux和osx一樣適用,所以 就不另外說明另外兩個真作業系統上面的改法了。

1.首先到 /Document and Settings/Administrator/_ipython下面找一個ipythonrc.ini 的檔案,假如沒上面目錄就找一下/Document and Settings/下面的/All Users或是登入名稱 的目錄下面有沒有,如果都沒有請確認是不是有設定 $HOME 環境變數,如果有設定的話應該會在 $HOME設定的目錄下。(linux/osx 在~/.ipython/ipythonrc)

2.在 ipythonrc.ini 裡面找到一行:

editor 0

改成

editor c:\vim\vim72\gvim.exe (填入想使用編輯器的路徑)

3.打完收工

編輯範例

In [4]: ed
IPython will make a temporary file named: /var/folders/iO/iODLAhjsHMiXw0jFf7Z3yU+++TI/-Tmp-/ipython_edit_MmSQ_n.py
Editing... done. Executing edited code...
Out[4]: "def edfun():\n    print 'editor defined function'\n\n"

上面例子首先輸入ed,iPython會打開編輯器,輸入完畢後存檔結束編輯IPython會 自動讀取,並執行剛剛輸入的資料。(下面是編輯器輸入的內容)

def edfun():
    print 'editor defined function'

如果不希望編輯完成後馬上執行,比如修改的是供程式呼叫的module,可以加上-x 選項(option)。

In [9]: ed -x edfun
Editing...

In [10]:

可以在ed後面加上參數,IPython會自動將source或是所在檔案開啟,請自行試試看 下面範例:

In [1]: import os

In [2]: ed -x os.path.isdir
Editing...

IPython打的好程式不想要重打

IPython 打好的程式不想重打怎辦?IPython提供一個magic function: hist可以列出 所有出入的內容。

In [8]: hist
1: _ip.magic("colors Linux")
2:
def myfun(a):
    for i in range(a):
        print i

如果覺得行號太礙眼可以加上-n選項(option)

In [8]: hist -n
_ip.magic("colors Linux")

def myfun(a):
    for i in range(a):
        print i

也可以濾掉magic function,只要加上-r選項即可。

edit指令也支援範圍操作:

edit 2:10 (將In[2]-In[10]取出並開啟外部編輯器編輯)

目錄的操作

IPython 的目錄操作沒什麼特別的,就是CD指令啪啪走,CD指令沒什麼好介紹的用法 windows和linux兩大系統的終端機都有,這邊介紹比較特別的指令。

bookmark
bookmark 可以替目錄取一個簡短的名稱。 比如要替當前目錄取名cw-> bookmark cw, 要替特定目錄上書籤-> bookmark bin /usr/local/bin

有了書籤就可以直接切換目錄,上例中設定的bin可以直接切換-> cd bin

Shell的互動

IPython不但是一個很好的python直譯器替代方案,他也是shell的替代方案,雖然 shell已經發展出許多不同的家族,如sh,C-Shell,bash等等,管理上shell script 也是大量被採用,但是如果你會python,小弟敢保證IPython絕對值得一試,威力 真的是強的和流氓一樣,唯一缺點可能就是要用你的script,必須裝上IPython吧。

Run Shell Command

開頭加上'!'

In [2]: !who
janaustin console   5 20 09:23
janaustin ttys001   5 25 16:00
janaustin ttys000   5 25 15:25
janaustin ttys002   5 25 16:39

如果要在shell command中使用python變數,只需要加上'$'

In [9]: !ls $pa
pass   pattn

In [9]: !ls $pattn
__init__.py   cdi_data.py      docCreator.py  go.py        rstView.py  test.py
adphelper.py  dataProvider.py  doceditor.py   ipython_log.py  rules.py         text_process.py
base_data.py  dmc.py        global.py      restwriter.py   setup.py    xml_data.py

python也可以接收shell command的輸出

In [14]: out = !ls
In [15]: out
Out[15]: SList (.p, .n, .l, .s, .grep(), .fields(), sort() available):
0: ADP
1: Python-3.0.1
2: Python-3.0.1.tgz
3: cocoa
4: docCreator
5: driverDoc.tmproj
6: firmware
7: gdata
8: graphicLib
9: hello.py
10: iPhone
11: pylint-0.15.2
12: python
13: rename.workflow
14: scripts
15: xml

懶人區

不知道是不是只有我會這樣,每次拿到新玩具第一個想知道的就是到底可以幫我省多少事,基本上 可以打一個自完成的事情我絕對不會考慮打兩個字,IPython到是提供了不少幫你少打字的功能。

<tab>
這說過了拉,就是補完~
print

print算是十分常用到的功能,IPython提共一個別名p,可以讓你少打4個字母喔

In [4]: msg = '12345'

    In [5]: p msg
    12345
呼叫fun

IPthon可以讓你省略括號...比如 fun(a,b)可以打成 fun a,b ,有點好笑可是真的 少打了兩個括號耶 XDDDDD。如果函式沒有參數,只要前面加上/,也可以省略後面的括號 ,比如show() -> /show。

In [1]: def funa(a,b):
   ...:     print a+b
   ...:
   ...:

In [2]: funa 1,2
------> funa(1,2)
3

In [3]: def show():
   ...:     print 'show'
   ...:
   ...:

In [4]: show
Out[4]: <function show at 0x4575f0>

In [5]: /show
------> show()
show

沒有留言:

Related Posts with Thumbnails