創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
房山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!這篇文章主要介紹如何閱讀Python開源項目會更好,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
閱讀Python開源項目代碼主要有如下三個原因:
1. 在工作過程中遇到一些問題,Google和StackOverFlow等網(wǎng)站找不到解決辦法,只能去翻源碼。
2. 對某些項目或者方向非常感興趣,希望深入。
3. 學(xué)習(xí)遇到瓶頸需要汲取開源項目的經(jīng)驗和用法來做提高。
沒有目的的閱讀開源項目就是耍流氓。浪費了時間,但是能學(xué)到的東西也很少。怎么樣根據(jù)自身情況去閱讀呢?
1. 和興趣以及工作契合。舉個例子,工作中沒有機會用到Celery又不是想自己造個輪子,讀它的源碼做什么?所以要從平時能接觸到的那些項目中選取。比如我,我肯定不去看Django的代碼,因為日常工作基本遇不到,遇到了現(xiàn)翻就好了。
2. 一個方向只看一兩個典型的就可以了。比如Web框架,我只看過Bottle和Flask的源碼(其實之前也看過Django的,只是淺嘗輒止),而且看Bottle已經(jīng)是好幾年前的事情了。并不是堆的多了更好,有時候反而選擇太多會懵。
3. 不同技術(shù)階段的選擇代碼量、復(fù)雜度不一樣的項目,下面會具體推薦。
4. 清楚自己看代碼的目的。就是你看代碼是想了解人家怎么設(shè)計、調(diào)試BUG、還是只是想學(xué)習(xí)正確的編程用法呢?其實沒有必要細(xì)摳每個代碼細(xì)節(jié),有時候當(dāng)黑盒看,知道輸入輸出就可以了。
我的喜好
和工作中看別人代碼差不多,基本每個人、每個項目、每個團隊都有自己寫代碼的風(fēng)格,比如變量命名風(fēng)格、某些語言特性使用方式、代碼規(guī)范要求、目錄風(fēng)格等,其實開源項目的作者也是一樣??创a,如看人(團隊)。 首先介紹下我的喜好(排名分先后):
1. kennethreitz。requests和python-guide作者。他還有一個非常勵志的故事,有興趣的可以看 誰說程序員不是潛力股?
2. mitsuhiko。flask、Jinja2、werkzeug和flask-sqlalchemy作者。
3. sigmavirus24。flake8、pycodestyle(原pep8)、requests、urllib3等項目的主要貢獻(xiàn)者和維護者。
4. ask。Celery及相關(guān)依賴的作者。
5. ajdavis。mongo-python-driver(pymongo)、tornado等項目的主要貢獻(xiàn)者。
6. bitprophet。fabric、paramiko(Python的ssh庫)作者。
前2個是公認(rèn)的Python領(lǐng)域代碼寫的最好的、最有創(chuàng)意的工程師。
初學(xué)者推薦閱讀項目
初學(xué)者可以先閱讀一些代碼量比較少的,最好是單文件的項目:
1. GitHub - kennethreitz/pip-pop: Tools for managing requirements files.
2. GitHub - kennethreitz/envoy: Python Subprocesses for Humans?.
3. GitHub - kennethreitz/records: SQL for Humans?
4. GitHub - mitsuhiko/pluginbase: A simple but flexible plugin system for Python.
5. GitHub - mitsuhiko/pipsi: pip script installer
6. GitHub - mitsuhiko/unp: Unpacks things.
7. GitHub - chrisallenlane/cheat
8. GitHub - jek/blinker: A fast Python in-process signal/event dispatching system.
9. GitHub - mitsuhiko/platter: A useful helper for wheel deployments.
10. GitHub - kennethreitz/tablib: Python Module for Tabular Datasets in XLS, CSV, JSON, YAML, &c.
看代碼主要是了解別人寫代碼的方式,語法實踐這些內(nèi)容。看完之后,你可以針對這些項目能解決的問題自己寫個項目,寫完之后和上述項目去對比一下,看看哪些方面做的不好。
進(jìn)階閱讀項目
進(jìn)階的時候就要閱讀一些相對復(fù)雜的項目,它們能幫助你提升Python編程技巧:
1. faif/python-patterns。使用Python實現(xiàn)一些設(shè)計模式的例子。
2. pallets/werkzeug。flask的WSGI工具集。其中包含了實現(xiàn)非常好的LocalProxy、cached_property、import_string、find_modules、TypeConversionDict等。
3. bottlepy/bottle。閱讀一個Web框架對Web開發(fā)就會有更深刻的理解,flask太大,bottle就4k多行,當(dāng)然如果你有毅力和興趣直接看flask是最好了的。
4. msiemens/tinydb。了解用Python實現(xiàn)數(shù)據(jù)庫。
5. coleifer/peewee。了解ORM的實現(xiàn)。
6. pallets/click。click已經(jīng)內(nèi)置于在flask 0.11里,提供命令行功能,值得閱讀。
7. mitsuhiko/flask-sqlalchemy。了解一個flask插件是怎么實現(xiàn)的。
除此之外Web開發(fā)者可以閱讀一些相關(guān)的項目:
1. runscope/httpbin。使用flask,網(wǎng)站是httpbin(1): HTTP Client Testing Service。
2. jahaja/psdash。使用flask和psutils的獲取Linux系統(tǒng)信息的面板應(yīng)用。
3. pallets/flask-website。 flask官方網(wǎng)站應(yīng)用。
4. pypa/warehouse。如果你使用pyramid,這個新版的PYPI網(wǎng)站,可以幫助你理解很多。
當(dāng)然,2個學(xué)習(xí)flask重要的資源必須爆一爆:
1. GitHub - realpython/discover-flask: Full Stack Web Development with Flask。
2. The Flask Mega-Tutorial。 這個就是《Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實戰(zhàn)》的原始博客。
500lines
推薦一個非常厲害的項目 GitHub - aosabook/500lines: 500 Lines or Less, 它里面包含了22個由該領(lǐng)域的專家完成,用不到500行的代碼實現(xiàn)一個特定功能的子項目。連Guido van Rossum都親自來寫基于asyncio爬蟲了,Nick Coghlan、ajdavis也出場了。
怎么閱讀開源項目源碼
我基于個人興趣和日常開發(fā)需要閱讀過一些開源項目,我列一些比較通用的經(jīng)驗和感悟:
1. 不要畏懼。我發(fā)現(xiàn)大家都經(jīng)常會感嘆XXX強大,YYY流行,無形中你會把它放在一個不可觸及到的地位,感覺它很難,而令自己不敢去挑戰(zhàn)它。其實是人就會產(chǎn)出bug,假如你發(fā)現(xiàn)它有問題,就應(yīng)該抓住機會去驗證它。這個過程中,它的神秘感也就消失了,有過這么幾次經(jīng)驗?zāi)憔陀行判牧?。其次是不要怕你提交的PR被拒絕。這是非常正常的,我有很多PR是被拒絕的,尤其是給標(biāo)準(zhǔn)庫提交的Patch,絕大多數(shù)都被拒絕了。
2. 帶著問題去閱讀代碼,這也是我認(rèn)為最有效的方式。這會讓你在閱讀時候有個主線,比較有針對性。
3. 斷點調(diào)試。在Python代碼中使用pdb一般不太好使,因為代碼復(fù)雜的話,這種斷點需要你使用多個n跳到對應(yīng)的位置,我一般都是先拋出異常,然后使用pdb的up/down/n等命令調(diào)試。當(dāng)然在目標(biāo)位置添加一些print日志或注釋部分代碼然后直接使用exit()退出也是可以的。
4. 善用文檔,官網(wǎng)例子。閱讀一個項目一開始會有點無從下手,那么就先好好這些內(nèi)容,它們一般都是作者表達(dá)這個項目的第一個入口。quickstart、tutorial等內(nèi)容中的最小化的例子其實就是最好的閱讀入口,先去看這些引用的模塊和調(diào)用的對應(yīng)方法或者函數(shù)的對應(yīng)實現(xiàn),從下至上去閱讀。
5. 理解作者的思考方式。不同的項目要有不同的思考方式來閱讀,不要擰著自己的習(xí)慣去閱讀,這樣會很累,得嘗試接受別人的觀點,甚至于改變自己。
6. 閱讀項目的早期版本。一些項目隨著時間演進(jìn)已經(jīng)非常復(fù)雜了,讀起來有難度,那么你可以回到項目的早期版本上,先去看相對簡單地版本,然后設(shè)置幾個時間點或者版本節(jié)點,漸進(jìn)的來閱讀。
7. 記憶并繪制項目架構(gòu)。項目就是一堆代碼的組合,除了學(xué)習(xí)編程技巧,還要了解項目的架構(gòu)決策,這對于未來自己寫大型項目非常用用。這種理解越補充,你會對它就越來越清晰。
8. 參與。如果只是看和思考而不參與,其實效果大打折扣。我建議要參與一些issue討論、向作者提問、提PR添加新的功能、幫助改善文檔等等。很多時候你理解的其實和作者是有沖突的,無論是你說服他和被他說服,對自己的成長都是很有幫助的。
以上是如何閱讀Python開源項目會更好的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
本文題目:如何閱讀Python開源項目會更好-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://aaarwkj.com/article44/csoeee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、移動網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化、Google、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容