為什么要閱讀開源代碼

閱讀 Python 開源專案代碼主要有如下三個原因:
- 在作業程序中遇到一些問題 Google 和 StackOverFlow 等網站找不到解決辦法,只能去翻原始碼,
- 對某些專案或者方向非常感興趣,希望深入,
- 學習遇到瓶頸需要汲取開源專案的經驗和用法來做提高,
注意:很多人學Python程序中會遇到各種煩惱問題沒有人幫答疑,為此小編建了個Python全堆疊免費答疑交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!
要有目的的閱讀開源專案
沒有目的的閱讀開源專案就是耍流氓,浪費了時間,但是能學到的東西也很少,怎么樣根據自身情況去閱讀呢?
- 和興趣以及作業契合,舉個例子,作業中沒有機會用到 Celery 又不是想自己造個輪子,讀它的原始碼做什么?所以要從平時能接觸到的那些專案中選取,有時候不去看 Django 的代碼,因為日常作業基本遇不到,遇到了現翻就好了,
- 一個方向只看一兩個典型的就可以了,比如 Web 框架只看過 Bottle 和 Flask 的原始碼,
- 清楚自己看代碼的目的,就是你看代碼是想了解人家怎么設計、除錯 BUG、還是只是想學習正確的編程用法呢?其實沒有必要細摳每個代碼細節,有時候當黑盒看,知道輸入輸出就可以了,
優秀的開源作者
和作業中看別人代碼差不多,基本每個人、每個專案、每個團隊都有自己寫代碼的風格,比如變數命名風格、某些語言特性使用方式、代碼規范要求、目錄風格等,其實開源專案的作者也是一樣,看代碼,如看人「團隊」
- kennethreitz Requests 和 Python-guide 作者,他還有一個非常勵志的故事,有興趣的可以看 誰說程式員不是潛力股?
- mitsuhiko flask、Jinja2、werkzeug 和 flask-sqlalchemy 作者,
- sigmavirus24 flake8、pycodestyle「原 pep 8」、requests、urllib3 等專案的主要貢獻者和維護者,
- ask Celery 及相關依賴的作者,
- ajdavis mongo-python-driver「pymongo」、tornado 等專案的主要貢獻者,
- bitprophet fabric、paramiko「Python 的 ssh 庫」作者,
前 2 個是公認的 Python 領域代碼寫的最好的、最有創意的工程師,
初學者推薦閱讀專案
初學者可以先閱讀一些代碼量比較少的,最好是單檔案的專案:
- GitHub - kennethreitz/pip-pop: Tools for managing requirements files
- GitHub - kennethreitz/envoy: Python Subprocesses for Humans?.
- GitHub - kennethreitz/records: SQL for Humans?
- GitHub - mitsuhiko/pluginbase: A simple but flexible plugin system for Python.
- GitHub - mitsuhiko/pipsi: pip script installer
- GitHub - mitsuhiko/unp: Unpacks things.
- GitHub - chrisallenlane/cheat
- GitHub - jek/blinker: A fast Python in-process signal/event dispatching system.
看代碼主要是了解別人寫代碼的方式,語法實踐這些內容,看完之后,你可以針對這些專案能解決的問題自己寫個專案,寫完之后和上述專案去對比一下,看看哪些方面做的不好,
進階閱讀專案
進階的時候就要閱讀一些相對復雜的專案,它們能幫助你提升 Python 編程技巧:
- faif/python-patterns 使用 Python 實作一些設計模式的例子,
- pallets/werkzeug flask 的 WSGI 工具集,其中包含了實作非常好的 LocalProxy、cached_property、import_string、find_modules、TypeConversionDict 等,
- bottlepy/bottle 閱讀一個 Web 框架對 Web 開發就會有更深刻的理解,flask 太大,bottle 就 4k 多行,當然如果你有毅力和興趣直接看 flask 是最好了的,
- msiemens/tinydb 了解用 Python 實作資料庫,
- coleifer/peewee 了解 ORM 的實作,
- pallets/click click 已經內置于在 flask 0.11 里,提供命令列功能,值得閱讀,
- mitsuhiko/flask-sqlalchemy 了解一個 flask 插件是怎么實作的,
除此之外 Web 開發者可以閱讀一些相關的專案:
- runscope/httpbin 使用 flask
- jahaja/psdash 使用 flask 和 psutils 的獲取 Linux 系統資訊的面板應用,
- pallets/flask-website flask 官方網站應用,
- pypa/warehouse 如果你使用 pyramid,這個 新版的 PYPI 網站 可以幫助你理解很多,
500 Lines
推薦一個非常厲害的專案 GitHub - aosabook/500lines: 500 Lines or Less, 它里面包含了 22 個由該領域的專家完成,用不到 500 行的代碼實作一個特定功能的子專案,連 Guido van Rossum 都親自來寫基于 asyncio 爬蟲了,Nick Coghlan、ajdavis 也出場了,更具體的介紹可以看 Python 的練手專案有哪些值得推薦? - 小小搬運工的回答
建議
不要畏懼
大家都經常會感嘆 XXX 強大,YYY 流行,無形中你會把它放在一個不可觸及到的地位,感覺它很難,而令自己不敢去挑戰它,其實是人就會產出 bug,假如你發現它有問題,就應該抓住機會去驗證它,這個程序中,它的神秘感也就消失了,有過這么幾次經驗你就有信心了,其次是不要怕你提交的 PR 被拒絕,這是非常正常的,我有很多 PR 是被拒絕的,尤其是給標準庫提交的 Patch,絕大多數都被拒絕了,
帶著問題去閱讀代碼
這也是我認為最有效的方式,這會讓你在閱讀時候有個主線,比較有針對性,
斷點除錯
在 Python 代碼中使用 pdb 一般不太好使,因為代碼復雜的話,這種斷點需要你使用多個 N 跳到對應的位置,我一般都是先拋出例外,然后使用 pdb 的 up、down、n 等命令除錯,當然在目標位置添加一些 print 日志或注釋部分代碼然后直接使用 exit() 退出也是可以的,
善用檔案
閱讀一個專案一開始會有點無從下手,那么就先好好這些內容,它們一般都是作者表達這個專案的第一個入口,quickstart、tutorial 等內容中的最小化的例子其實就是最好的閱讀入口,先去看這些參考的模塊和呼叫的對應方法或者函式的對應實作,從下至上去閱讀,
理解作者的思考方式
不同的專案要有不同的思考方式來閱讀,不要擰著自己的習慣去閱讀,這樣會很累,得嘗試接受別人的觀點,甚至于改變自己,
閱讀專案的早期版本
一些專案隨著時間演進已經非常復雜了,讀起來有難度,那么你可以回到專案的早期版本上,先去看相對簡單地版本,然后設定幾個時間點或者版本節點,漸進的來閱讀,
記憶并繪制專案架構
專案就是一堆代碼的組合,除了學習編程技巧,還要了解專案的架構決策,這對于未來自己寫大型專案非常用用,這種理解越補充,你會對它就越來越清晰,
總結:很多人學Python程序中會遇到各種煩惱問題沒有人幫答疑,為此小編建了個Python全堆疊免費答疑交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/192496.html
標籤:Python
上一篇:python 進制
