本文經(jīng)作者本人授權(quán)轉(zhuǎn)載自CSDN博客:賴勇浩的編程私伙局。
文章其實是賴大在某次活動中和Python學(xué)習(xí)者的問答,里面有很多你在學(xué)習(xí)Python過程中可能會遇到的問題。雖然時間有點早了,是2014年時的文章,但還是推薦閱讀。
下面是正文:
大約1個月前,oschina.net和華章圖書一起合作做了一個活動:OSC第51期高手問答——聊聊python那些事,來推廣我參與撰寫的書《編寫高質(zhì)量代碼:改善Python程序的91個建議》。
在回答問題的過程中,我看到有若干問題是好幾個人都問了的,就萌發(fā)了在事后把這些問答整理整理的想法,以下內(nèi)容就是來自那一次的問答。為簡化整理,已經(jīng)去掉了提問人的昵稱,并做了簡單的分類。
糾結(jié)的Py2與Py3之選
Q: Python 3 會導(dǎo)致Python的什么前景?最終由3統(tǒng)一,還是一直分裂?各自用自己的版本?
A: py3自發(fā)布以來,進步很大,解決了很多py2無法解決的問題,所以我是堅信大家最終會轉(zhuǎn)到py3。現(xiàn)在py3已經(jīng)有許多非常吸引人的特性,比如yield from,比如asyncio,比如更漂亮的庫結(jié)構(gòu),等等。
但我承認(rèn)py3還沒有一個巨大的吸引讓大家轉(zhuǎn)過去,yield from 算半個,另外半個我覺得是jit,想像一下py3自帶jit,運行速度是py2的3到10倍,大家肯定一窩蜂轉(zhuǎn)過去了。我覺得py3是未來,但也贊同兩個割裂的版本影響推廣。
Q:新手入門應(yīng)該學(xué)2還是3?2會被Python團隊放棄嗎?
A:學(xué)py2吧,如果到時要轉(zhuǎn)py3也是很容易的事。但如果直接學(xué)py3,到時候項目要用py2,就會覺得由奢入儉,很痛苦。
Q:請問您覺得Python3.x需要多久才能成為主流?
A:還有比較長的時間,但如果py3.5有獨占的、可靠的、官方的jit方案的話,應(yīng)該會加速很多很多!
怎樣學(xué)習(xí)Python
Q:Python適合作為一個編程入門語言嗎。
A:考慮到就業(yè)等,我覺得C語言還是更適合作為入門。
Q: Python學(xué)習(xí)的進階?基本知識掌握后,該怎么學(xué)習(xí)?
A:如果已經(jīng)在工作了,那就直接嘗試用python去解決工作需求就好了;如果是學(xué)生,那就去復(fù)制已存在的網(wǎng)站,把它的功能都弄來,比如oschina。
Q: 高質(zhì)量的代碼是怎么寫的,怎么提升自己的代碼的質(zhì)量?
A: 個人看法:1、熟悉語言的細(xì)節(jié);2、熟悉語言和庫的最佳實踐;3、多看一些提升代碼質(zhì)量的指導(dǎo)書籍;4、同行評審;5、多學(xué)幾門語言,博采眾長。
Q:對一個java開發(fā)者來說學(xué)習(xí)使用python有什么好的建議嗎?
A:像當(dāng)年學(xué)習(xí)java一樣學(xué)習(xí)它。
Q:初學(xué)者,有什么好的網(wǎng)站推薦學(xué)習(xí)?
A:還是讀書、看手冊吧,網(wǎng)站的知識太零散,不成體系,容易學(xué)成野路子程序員。
Q:學(xué)習(xí)和使用了一段python后怎么做才能更好的提高自己使用python的能力呢?
A:我的回答是復(fù)刻一些產(chǎn)品,比如自己嘗試做個豆瓣、oschina之類。
Q:《編寫高質(zhì)量代碼:改善Python程序的91個建議》這本書適合其它非Python程序員看嗎?
A:不適合。它的定位是對python有所了解的人。給初中級python程序員提升到中高級,這樣的定位。
Q:請推薦幾個比較優(yōu)秀的Python開源項目,用來學(xué)習(xí)的。
A:優(yōu)秀的python開源項目啊,我想一下,額,看一下trac和reviewboard?
Q:你覺得你學(xué)Python以來覺得關(guān)于Python最好的書籍有哪些呢?語言基礎(chǔ)、語言設(shè)計、框架方面,等等都行。謝謝了。
A:很好的問題,我覺得可以回答,因為我自己覺得自己的書也不是“最好的”那個層次。推薦《expert python programming(中譯Python高級編程,翻譯差強人意)》、《Python源碼剖析》。
Q:你好,我有個問題想請教你,如何成為真正的pythoner。我以前是做C++的,現(xiàn)在工作會接觸一些python web方面的任務(wù)。
我最開始接觸python的時候?qū)W了些基本的語法就開始嘗試寫與算法相關(guān)的程序了,所以寫python程序的時候代碼還是有C++的影子,直到現(xiàn)在工作中維護之前別人的python web程序的時候,發(fā)現(xiàn)自己的python程序太不優(yōu)雅了,好多時候有的功能可以用更美更快更高效的方式實現(xiàn),但我可能會像C++里面一樣想要從底層一點一草一木的搭建、控制我的程序。
后來發(fā)現(xiàn)可以幾行甚至更短的代碼就可以實現(xiàn)那些功能,而且執(zhí)行效率也更好一點,于是發(fā)現(xiàn)寫python程序不能用以前C++代碼時的思想,或許我可以嘗試更pythoner一點?
A: 很有意思的一個問題,個人建議如下:
1、通讀一遍手冊,特別是lib ref和lang ref,所謂熟能生巧,對語言本身的熟悉才能寫得更pythonic;
2、多看一下經(jīng)典的python項目的文檔,比如flask,比如pip,看看他們提供了什么機制,甚至探究到這樣的機制是怎么提供的;3、不要擔(dān)心,多寫一些python代碼就好了。
應(yīng)用Python的困惑
Q:Python 適合開發(fā)比較復(fù)雜的web項目嗎?
A:在我看來,python適合開發(fā)小中大巨多種復(fù)雜程度的項目,因為能不能把項目做成,最關(guān)鍵的因素還是人。python對web支持不錯,有許多第三方庫,也有django/flask等許多人叫好的框架。
Q:入門Python用哪個操作系統(tǒng)環(huán)境好?我就只在Windows上學(xué)過一點基礎(chǔ),但不知一般真實團隊開發(fā)環(huán)境是怎樣,可以可以介紹下?謝謝!
A:我們一直用linux作為生產(chǎn)環(huán)境,mac os x 是我的開發(fā)環(huán)境,我用過許多年的windows,我不覺得使用windows會影響你的學(xué)習(xí)。
Q:目前python似乎大多數(shù)都是在WEB方向的應(yīng)用,對于做C語言和C++的開發(fā)python有什么可以幫助的地方?
A:主要是利用動態(tài)語言的靈活性、解釋型語言的方便性,來解決C/C++在應(yīng)變多變的業(yè)務(wù)需求、快速部署等方面的成本過高或力不從心的問題。
經(jīng)驗之談
Q:學(xué)生,只往PyQt方向發(fā)展可行嗎?
A:從長遠(yuǎn)來說,一里通百里融,只要有個突破口,后面有成就也是很可能的。從短期來說,感覺這方面就業(yè)面比較窄。
Q:感覺python什么都可以做,但是很難做到很好。如果沒有c/c++/go擴展, python能做出大吞吐量,高并發(fā)高穩(wěn)定性的系統(tǒng)嗎?
A:說python什么都可以做,還是高估了,但說python很難做到很好,就得看“很好”這個詞怎么定義了,估計各人的標(biāo)準(zhǔn)還不一樣。恕我見識少,好像用go來擴展python還沒有成熟方案?目前我經(jīng)歷的網(wǎng)游、網(wǎng)站方面來說,我覺得還可以做出大吞吐量的高并發(fā)系統(tǒng)的,只是可能硬件成本會稍高些,至于穩(wěn)定性,決定性的因素是開發(fā)人員的質(zhì)量,跟語言關(guān)系不大,甚至c/c++更容易開發(fā)出不穩(wěn)定的系統(tǒng)。
Q:python 的類庫,函數(shù)庫龐大,如何能快速找到自己需要的類庫?
A:這是一個問題,很多語言都有同樣的問題。要不你先去看一下 awesome-python 這個項目?
Q:python程序員收入咋樣?
A:好像年收入從幾萬到幾十萬的都見過,但上百萬的我還沒有見過。總得來說,我覺得跟其它語言的差不多,但高薪的比例可能是比較靠前的。
Q:我原是一名ruby程序員,后來看到python有非常多的模塊,如ipython、ipython notebook等非??岬膒ython應(yīng)用,其實在靈活性上python遠(yuǎn)不如ruby(method_missing等),設(shè)計哲學(xué)也不一樣,想問一下為什么python比ruby的應(yīng)用多很多?特別是科學(xué)計算(Numpy)和繪圖(matplot)?
A:于python會在科學(xué)界這么流行的原因,據(jù)說是因為那些科學(xué)家都不是計算機專業(yè)的,覺得python這貨容易學(xué)容易用,所以就用這個,反正只是一次性地寫寫腳本跑一下試驗數(shù)據(jù)。
Q:我想請問,python用來寫游戲好么,大家不都說python相對運行起來比c++/c慢,而現(xiàn)在大部分游戲引擎也都是c/c++,就看那個Cocos2d,最先貌似是python版,之后還是用c/c++重寫,雖說現(xiàn)在Python版也有更新;另外,現(xiàn)在移動端的各種軟件游戲開發(fā)也比較熱門,python在這方面好像有點跟不上的感覺。
A:是,在手游時代,python已經(jīng)不合適編寫客戶端了。可以嘗試在服務(wù)器端使用它,還是很好的。
Q:我有這么幾個問題想請教一下:
多框架、多模塊的實現(xiàn)語言代表著多學(xué)習(xí)成本嗎?
膠水語言的存在,現(xiàn)在主要用來做什么,其他層面上是如何應(yīng)用的?
類 Unix 系統(tǒng)管理,如何學(xué)習(xí)他們?
Web 方面與 ruby 之類的有哪些區(qū)別,或者說,優(yōu)缺點
寫過文字性的爬蟲,感覺字符集和平臺差異稍有異樣,請問您是如何避免的?
A:
我不太明白多框架、多模塊是什么意思,我可以理解為python有很多框架嗎?如果是的話,我覺得并不代表更多的學(xué)習(xí)成本,你看一下quick-start,看一下examples,看一下doc里關(guān)于擴展和分拆的機制,就知道這個框架、模塊是否適合你的技術(shù)觀,適合的就行,不適合的就不學(xué),不學(xué)不會有成本;
膠水語言的這個問題,我覺得《unix編程藝術(shù)》這本書里談得比我講要好得多,推薦看;
關(guān)于sa這一塊,我了解不多,建議查閱專著;
ruby的好處就是有ror這樣的大一統(tǒng)解決方案,python是選擇多,麻煩也多;
文本處理,在編碼上的問題很多、很難,建議使用 chardet 等方案,但都是有力不能及的地方的,建議接受部分問題是無法解決的現(xiàn)實。
Q:以下的幾個問題想請教一下的:
如何做到高效的python coder, 我也是近這2年才開始用python的,但覺得開化效率還有很多改善的地方,與相對公司內(nèi)部的java組來說。
python 的其中一點我比較喜歡的是比較明了,什么東西都比較原生態(tài),相當(dāng)于.net來說過于包裝,這就是它的長處,如果現(xiàn)成的lib也可以找到,請問一下平時一般常用的東西,是自己做成lib好,還是直接用別人寫好的lib好?謝謝
python是否比較適合寫web呢或是比較好的選擇?相對于國內(nèi)這個環(huán)境來說,python這一方面真的比較少些,當(dāng)然國外有g(shù)oogle做帶頭大哥,它期下的很多projects都很出彩的,我現(xiàn)在做一個web 方面的project,選擇bottle,它和flask比較類似,速度方面會較好一點,發(fā)現(xiàn)項目進行中遇到不少關(guān)于技術(shù)方面的問題,可查找到的資料比較少,解決問題相當(dāng)困難。
A:
怎么做高效的python coder,我覺得跟其它語言沒有二致,不管怎么樣,多讀官方文檔肯定大有增益,這也是我的經(jīng)驗之談。
我一般直接用別人寫好的lib,如果有而且用起來爽的話;
建議選擇flask/django等社區(qū)比較大、比較活躍的框架。
編碼一線
Q:個人感覺python沒有成熟的IDE,寫程序都是文檔不停不停地翻,不想寫C++或用eclipse,都是自動提示+文檔,我想知道是我實在是才疏學(xué)淺還是python開發(fā)的通病呢?
A:嗯,其實沒有特別厲害的IDE,pyCharm是比較好的,而且有免費的社區(qū)版,習(xí)慣了用E記的,可以試一下pydev。
Q:想問一下,python每import一個模塊都會在內(nèi)存中實例化還是共享一個實例。
A:默認(rèn)是共享一個。
Q:您是用什么工具打包python工程的?我使用pyinstaller打包包含gtk的程序后,執(zhí)行打包后的文件會報_glib module 不存在。不知道還有什么更好的工具沒。最好是跨平臺的。
A:我們一般不打安裝包,我們一般就是用setuptools。
Q:python“函數(shù)”的返回值類型不在語句的語法聲明中,使用python開發(fā)項目,由于返回值類型不那么明確,怎么確保在軟件迭代中不會弄錯?
A:一方面是大家遵守一些最佳實踐,比如保證返回值都是同一類型的;二是充分進行單元測試;三是使用較新的python版本,已經(jīng)支持參數(shù)和返回值的類型聲明。
Q:對于python 的協(xié)程 有什么好的庫比較好用
A:必須是gevent。
Q:請問Python有類似Ruby社區(qū)RVM、Bundler、Rake的成熟工具鏈么?
A:有的,pypi.python.org,你可以上去看一下。我書里也有提到這些工具鏈的用法。
點擊圖片閱讀我們的推薦
如何將Eclipse中配置Python開發(fā)環(huán)境?
點擊關(guān)鍵詞查看對應(yīng)內(nèi)容:
Vim | Sublime Text 3 | Emacs | PyCharm 5 | 引力波 | Python簡史 | MITx公開課 | 編碼風(fēng)格 | Python入門 | 程序員的日常
聯(lián)系客服