关于Python编程的一些问答
關于Python編程的一些問答
導語
大約1個月前,oschina.net和華章圖書一起合作做了一個活動:OSC第51期高手問答——聊聊python那些事,來推廣我參與撰寫的書《編寫高質量代碼:改善Python程序的91個建議》(豆瓣鏈接)。在回答問題的過程中,我看到有若干問題是好幾個人都問了的,就萌發了在事后把這些問答整理整理的想法,以下內容就是來自那一次的問答。為簡化整理,已經去掉了提問人的昵稱,并做了簡單的分類。
糾結的Py2與Py3之選
Q:Python 3 會導致Python的什么前景?最終由3統一,還是一直分裂?各自用自己的版本?
A:py3自發布以來,進步很大,解決了很多py2無法解決的問題,所以我是堅信大家最終會轉到py3。現在py3已經有許多非常吸引人的特性,比如yield from,比如asyncio,比如更漂亮的庫結構,等等。但我承認py3還沒有一個巨大的吸引讓大家轉過去,yield from 算半個,另外半個我覺得是jit,想像一下py3自帶jit,運行速度是py2的3到10倍,大家肯定一窩蜂轉過去了。我覺得py3是未來,但也贊同兩個割裂的版本影響推廣。
Q:新手入門應該學2還是3?2會被Python團隊放棄嗎?
A:學py2吧,如果到時要轉py3也是很容易的事。但如果直接學py3,到時候項目要用py2,就會覺得由奢入儉,很痛苦。
Q:請問您覺得Python3.x需要多久才能成為主流?
A:還有比較長的時間,但如果py3.5有獨占的、可靠的、官方的jit方案的話,應該會加速很多很多!
怎樣學習Python
Q:Python適合作為一個編程入門語言嗎。
A:考慮到就業等,我覺得C語言還是更適合作為入門。
Q:python學習的進階?基本知識掌握后,該怎么學習?
A:如果已經在工作了,那就直接嘗試用python去解決工作需求就好了;如果是學生,那就去復制已存在的網站,把它的功能都弄來,比如oschina。
Q:高質量的代碼是怎么寫的,怎么提升自己的代碼的質量?
A:個人看法:1、熟悉語言的細節;2、熟悉語言和庫的最佳實踐;3、多看一些提升代碼質量的指導書籍;4、同行評審;5、多學幾門語言,博采眾長。
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:很有意思的一個問題,個人建議如下:1、通讀一遍手冊,特別是lib ref和lang ref,所謂熟能生巧,對語言本身的熟悉才能寫得更pythonic;2、多看一下經典的python項目的文檔,比如flask,比如pip,看看他們提供了什么機制,甚至探究到這樣的機制是怎么提供的;3、不要擔心,多寫一些python代碼就好了。
應用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,你可以上去看一下。我書里也有提到這些工具鏈的用法。
from:http://blog.csdn.net/gzlaiyonghao/article/details/38985017
總結
以上是生活随笔為你收集整理的关于Python编程的一些问答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11中值得关注的几大变化
- 下一篇: 用python实现基本A*算法