1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        手把手教你閱讀開源代碼【附Python開源項目包】

        共 3400字,需瀏覽 7分鐘

         ·

        2021-04-29 19:28


        文末領(lǐng)取【Python開源項目包】





        1


        為什么要閱讀開源代碼


        閱讀 Python 開源項目代碼主要有如下三個原因:

        • 在工作過程中遇到一些問題 Google 和 StackOverFlow 等網(wǎng)站找不到解決辦法,只能去翻源碼

        • 對某些項目或者方向非常感興趣,希望深入

        • 學(xué)習(xí)遇到瓶頸需要汲取開源項目的經(jīng)驗和用法來做提高


        2


        要有目的的閱讀開源項目


        沒有目的的閱讀開源項目就是耍流氓,浪費了時間,但是能學(xué)到的東西也很少。怎么樣根據(jù)自身情況去閱讀呢?


        • 和興趣以及工作契合。舉個例子,工作中沒有機會用到 Celery 又不是想自己造個輪子,讀它的源碼做什么?所以要從平時能接觸到的那些項目中選取。有時候不去看 Django 的代碼,因為日常工作基本遇不到,遇到了現(xiàn)翻就好了。

        • 一個方向只看一兩個典型的就可以了。比如 Web 框架只看過 Bottle 和 Flask 的源碼。

        • 清楚自己看代碼的目的。就是你看代碼是想了解人家怎么設(shè)計、調(diào)試 BUG、還是只是想學(xué)習(xí)正確的編程用法呢?其實沒有必要細摳每個代碼細節(jié),有時候當(dāng)黑盒看,知道輸入輸出就可以了。


        3


        優(yōu)秀的開源作者


        和工作中看別人代碼差不多,基本每個人、每個項目、每個團隊都有自己寫代碼的風(fēng)格,比如變量命名風(fēng)格、某些語言特性使用方式、代碼規(guī)范要求、目錄風(fēng)格等,其實開源項目的作者也是一樣。看代碼,如看人「團隊」


        • kennethreitz Requests Python-guide 作者。他還有一個非常勵志的故事,有興趣的可以看《誰說程序員不是潛力股?》https://zhuanlan.zhihu.com/p/22332669

        • mitsuhiko flask、Jinja2、werkzeug 和 flask-sqlalchemy 作者。

        • sigmavirus24 flake8、pycodestyle「原 pep 8」、requests、urllib3 等項目的主要貢獻者和維護者。

        • ask Celery 及相關(guān)依賴的作者。

        • ajdavis mongo-python-driver「pymongo」、tornado 等項目的主要貢獻者。

        • bitprophet fabric、paramiko「Python 的 ssh 庫」作者。


        前 2 個是公認的 Python 領(lǐng)域代碼寫的最好的、最有創(chuàng)意的工程師。


        4


        初學(xué)者推薦閱讀項目


        初學(xué)者可以先閱讀一些代碼量比較少的,最好是單文件的項目:

        • kennethreitz/pip-pop: Tools for managing requirements files

        • kennethreitz/envoy: Python Subprocesses for Humans?.

        • kennethreitz/records: SQL for Humans?

        • mitsuhiko/pluginbase: A simple but flexible plugin system for Python

        • mitsuhiko/pipsi: pip script installer

        • itsuhiko/unp: Unpacks things

        • chrisallenlane/cheat

        • jek/blinker: A fast Python in-process signal/event dispatching system


        ??????????

        初學(xué)者項目小編整理了合集

        文末添加【小編】領(lǐng)取哦


        看代碼主要是了解別人寫代碼的方式,語法實踐這些內(nèi)容??赐曛?,你可以針對這些項目能解決的問題自己寫個項目,寫完之后和上述項目去對比一下,看看哪些方面做的不好。


        5


        進階閱讀項目


        進階的時候就要閱讀一些相對復(fù)雜的項目,它們能幫助你提升 Python 編程技巧

        • faif/python-patterns 使用 Python 實現(xiàn)一些設(shè)計模式的例子。

        • pallets/werkzeug flask 的 WSGI 工具集。其中包含了實現(xiàn)非常好的 LocalProxy、cached_property、import_string、find_modules、TypeConversionDict 等。

        • bottlepy/bottle 閱讀一個 Web 框架對 Web 開發(fā)就會有更深刻的理解,flask 太大,bottle 就 4k 多行,當(dāng)然如果你有毅力和興趣直接看 flask 是最好了的。

        • msiemens/tinydb 了解用 Python 實現(xiàn)數(shù)據(jù)庫。

        • coleifer/peewee 了解 ORM 的實現(xiàn)。

        • pallets/click click 已經(jīng)內(nèi)置于在 flask 0.11 里,提供命令行功能,值得閱讀。

        • mitsuhiko/flask-sqlalchemy 了解一個 flask 插件是怎么實現(xiàn)的。


        除此之外 Web 開發(fā)者可以閱讀一些相關(guān)的項目:

        • runscope/httpbin 使用 flask

        • jahaja/psdash 使用 flask 和 psutils 的獲取 Linux 系統(tǒng)信息的面板應(yīng)用。

        • pallets/flask-website flask 官方網(wǎng)站應(yīng)用。

        • pypa/warehouse 如果你使用 pyramid,這個 新版的 PYPI 網(wǎng)站 可以幫助你理解很多。


        ??????????

        進階項目小編整理了合集

        文末添加【小編】領(lǐng)取哦


        6


        500 Lines


        推薦一個非常厲害的項目 aosabook/500lines: 500 Lines or Less, 它里面包含了 22 個由該領(lǐng)域的專家完成,用不到 500 行的代碼實現(xiàn)一個特定功能的子項目。連 Guido van Rossum 都親自來寫基于 asyncio 爬蟲了,Nick Coghlan、ajdavis 也出場了。【這個項目小編也整理了,都在今日贈送的資料包中哦~】


        7


        建 議


        1. 不要畏懼


        大家都經(jīng)常會感嘆 XXX 強大,YYY 流行,無形中你會把它放在一個不可觸及到的地位,感覺它很難,而令自己不敢去挑戰(zhàn)它。其實是人就會產(chǎn)出 bug,假如你發(fā)現(xiàn)它有問題,就應(yīng)該抓住機會去驗證它。這個過程中,它的神秘感也就消失了,有過這么幾次經(jīng)驗?zāi)憔陀行判牧?。其次是不要怕你提交?PR 被拒絕。這是非常正常的,我有很多 PR 是被拒絕的,尤其是給標準庫提交的 Patch,絕大多數(shù)都被拒絕了。


        2. 帶著問題去閱讀代碼


        這也是我認為最有效的方式。這會讓你在閱讀時候有個主線,比較有針對性。


        3. 斷點調(diào)試


        在 Python 代碼中使用 pdb 一般不太好使,因為代碼復(fù)雜的話,這種斷點需要你使用多個 N 跳到對應(yīng)的位置,我一般都是先拋出異常,然后使用 pdb 的 up、down、n 等命令調(diào)試。當(dāng)然在目標位置添加一些 print 日志或注釋部分代碼然后直接使用 exit() 退出也是可以的。


        4. 善用文檔


        閱讀一個項目一開始會有點無從下手,那么就先好好梳理這些內(nèi)容,它們一般都是作者表達這個項目的第一個入口。quickstart、tutorial 等內(nèi)容中的最小化的例子其實就是最好的閱讀入口,先去看這些引用的模塊和調(diào)用的對應(yīng)方法或者函數(shù)的對應(yīng)實現(xiàn),從下至上去閱讀。


        5. 理解作者的思考方式


        不同的項目要有不同的思考方式來閱讀,不要擰著自己的習(xí)慣去閱讀,這樣會很累,得嘗試接受別人的觀點,甚至于改變自己。


        6. 閱讀項目的早期版本


        一些項目隨著時間演進已經(jīng)非常復(fù)雜了,讀起來有難度,那么你可以回到項目的早期版本上,先去看相對簡單地版本,然后設(shè)置幾個時間點或者版本節(jié)點,漸進的來閱讀。


        7. 記憶并繪制項目架構(gòu)


        項目就是一堆代碼的組合,除了學(xué)習(xí)編程技巧,還要了解項目的架構(gòu)決策,這對于未來自己寫大型項目非常用用。這種理解越補充,你會對它就越來越清晰。


        END -



        Destiny | 作者

        LearnKu | 來源

        https://learnku.com/articles/23010/teach-you-to-read-the-python-open-source-project-code



        添加小編領(lǐng)取Python開源項目包哦!

        瀏覽 77
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            激情丁香五月婷婷 | 激情乱伦大杂烩 | 国产一二三专区 | 女人18精品一区二区三区 | 97超碰在线免费 | 交女视频网站 | 欧美日韩无 | 男人叉女人的视频 | 久久大香蕉欧美 | 大胸喂奶三级在线观看 |