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