2008年7月13日 星期日

查 Python 函式的方法

學程式語言的首要問題就是如何查函式,個人認為有良好的查函式介面,才容易推廣程式語言。

像 Java 有 JavaDoc,可從 Sun 官網查詢(個人喜歡用別人包好的 Windows Help 檔);PHP 官網也有便利的查詢介面;C 在 Unix 上可用 man page(硬漢工程師才用 C,啃點 man page 不是問題!); 個人覺得Ruby的官網文件不怎麼好查,不過用 Ruby 直接查到是滿快的。比方我記得有個 p 開頭的函式可以消掉陣列最後一個元素,開個 irb(interactive interpreter)這麼打即可:

[].methods.grep /p/

查到正確名稱後,再用 ri 查詳細用法,相當順手。

Python 在這方面弱了一些,這裡整理一下我目前的做法(從 Scott 那學來的)。首先,一定要裝 ipython(功能強大的 interactive interpreter),之後就可以利用 code completion 來查名稱,例如:

n [2]: a = “”

In [3]: a.sp
a.split a.splitlines

In [3]: a.split?
Type: builtin_function_or_method
Base Class:
String Form:
Namespace: Interactive
Docstring:
S.split([sep [,maxsplit]]) -> list of strings

Return a list of the words in the string S, using sep as the
delimiter string. If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator.

注意,直接打 “”.sp 再按 TAB 是沒用的,因為 ipython 要按下 ENTER 後才能猜測先前輸入過的變數型別為何。名稱後加「?」可以叫出 __doc__ 內的說明。

若想像 Ruby 那樣搜尋特定函式名稱,得透過 __dict__ 或直接用 built-in function dir(),__dict__ 位存有 class 內的 methods 和 fields,下面的效果和 Ruby 相同:

print [s for s in dir([]) if "p" in s]

沒有留言:

張貼留言