如何正確地閱讀 Python 源碼包?

github 上有很多優秀的 Python 源碼(例如 Werkzeug)。但是這些 Python 包源碼量都很多,請問各位大大應該怎麼正確地理解一個包?


如果只是理解Python大體上是如何運作的,那麼看這些。

  • 形式上: Grammar/Grammar
  • 語法處理: Parser/Python.asdl, Python/ast.c, Include/Python-ast.h
  • 編譯機制: Python/compile.c, Python/symtable.c
  • 虛擬機位元組碼: Include/opcode.h

位元組碼只能看懂,如何運行其實不是太懂。


先知道是幹嘛用的 =&> 讀tutorial or doc

然後再用 =&> 寫個小Demo

Debug =&> 看代碼

或者功力深厚的

去Issue 里挑個想做的, 和人家說一下, 然後開始看代碼, 寫Patch


正確地姿勢:

用-&>糟糕出bug了-&>看文檔debug-&>不成,看源碼-&>回到第一步


前面都說得很好。

黃哥也來說說這個。

以 Werkzeug 為例,

1、 首先看文檔,看這個庫解決啥問題。

2、再看examples 將例子中的代碼跑起來。

werkzeug/examples at master · pallets/werkzeug · GitHub

3、從應用反推,看例子中代碼,是解決的啥問題,是怎麼解決的,調用了哪些模塊和包,

再看被調用的模塊或包,又是解決哪些問題,又是怎麼解決的。

4、對於不懂的地方搜google。

5、看源代碼的目的是為了提升自己寫代碼的水平,看到好的代碼,要記筆記,下次自己寫項目可以用上。好的項目代碼組織也可以模仿。


1. doc

2. run 看 log,strace/ltrace 看進程相關調用

3. 硬讀源碼,怕忘記各種調用關係,就拿筆在白紙上畫流程,複雜的直接上 yEd

4. 關鍵過程上 pdb debug

5. use it,這步最關鍵,不常用都白搭

黑盒白盒都上了,就是這樣的姿勢。


1.話說,如果沒有一定的基礎,以及明確自己的目的。

你就是神人,花1小時看完源碼,也都是沒有意義的。

2.就像你如果只是去背單詞,看單詞表,都看完,但是不懂含義,也是沒價值的。

3.應該清楚自己要做什麼。然後再去找合適的辦法,才是解決問題的正常思路。

4.單獨回答你這個問題則是:

從幾天,到幾個月,或者幾年

具體多少天,取決於:

你本身python的基礎

想要實現什麼目的

比如,對於python不熟悉,那可能有些人需要幾年,才能完全看懂源碼。

當然,你要是把python源代碼當做單詞朗讀一樣,只是看一眼,那就是另說了。

對於Python很熟悉的,只需要很快速的,看各種功能如何實現,找到對應的介面,研究對應的實現機制。則也是時間長短不同。


推薦閱讀:

eclipse 4.6叫neon,neon有什麼引申含義嗎?
軟體測試人員怎麼提高效率?
COM 過時了嗎?它的應用前景究竟如何?
有哪些最經典有趣的編程通用習題可以給零基礎的人循序漸進地練習寫代碼?
土豪程序員的生活是怎樣的?

TAG:Python | 編程 | 代碼 | 源代碼 | Pythonic |