http://matrix.42qu.com/10757179
前言
其實我也不知道python怎麼入門,由我來寫這個真的不是很合適。我學python是直接找了dive into python來看。而後照着寫了幾個例子。大概兩天後,就能磕磕絆絆的上路了。就好像拿筷子,都不記得怎麼學會的拿筷子,怎麼來教人呢?
不過最近在python-cn的列表裏面,我大概連續數週都持續看到「python入門看哪本教程比較好」,實在是不堪其擾。乾脆就寫個簡單的guide,有心的人本身看。沒心的——那我也沒辦法了。
基本知識
首先,你要了解一個事情。不少你不會的東西並不屬於python。例如你不知道網絡通信的流程,你不知道文件的權限和打開標誌用法,你不知道fork和stdin/stdout的關係。這些python教不會你。若是你缺少這些和語言/庫無關的相關知識,請自行補課。若是你缺少計算機基礎理論,請自行補課。
所以不要隨便給我發郵件/留言/諮詢,爲何這個問題在python裏沒法解決。爲何python沒法所見即所得,爲何python沒法熱部署,爲何python沒法用於嵌入式開發。在問這個問題以前,請先確認「這是一個python的問題」。例如GIL,或者腦殘lambda。若是你不肯定,請本身搜索一下相關的文章,確認一下。在提問前,看看「提問的智慧」。若是你確實搜過了,找不到,那就問吧,沒辦法。
入門
在網絡上,python入門的兩大基礎書籍分別是:
A Byte of Python 中文版
Dive Into Python 中文版
後面基本就是看python-doc,我推薦你跳過一堆有的沒的,直接看Library Reference。python自己就是易讀性極強的代碼,文檔又至關漂亮,內置庫又全。大部分狀況下,python-doc都應當能解決你的問題。
web
web是程序員的一大去向。python程序員入門必需要過的一個框架就是django。不要糾結了,django在python社區中名氣太大,用的人太多。所以入門材料是最多的,社區最大,門檻最低。若是你要入門web,必然從django開始。在不熟悉python的狀況下,我不推薦你貿然從其餘框架開始入門。
固然,若是你已經熟悉python了,考慮入門web框架,能夠參考專精一節。
爬蟲
python下說到爬蟲開發,入門首選Scrapy。緣由和上面同樣,社區最大,用的人最多。好很差用就見仁見智了。反正個人全部爬蟲框架都是用本身基於gevent寫的庫。
ui
python的ui框架也不少,很複雜。一樣,若是是入門,我建議從qt的兩個框架,pyqt和pyside開始入門。關於這兩家的恩怨我就很少廢話了。
專精
所謂專精,是指使用python在特定工做上。咱們基本分爲幾個領域。
系統和部署
virtualenv:基本凡是在商用環境中部署的,建議都用這個。能夠將python自帶在源碼裏面,避免遷移/集成問題。
python-daemon:寫daemon的時候比較方便。
網絡
說到網絡,基本就是除web外。
twisted:很是強大的網絡庫,各類協議支持全面,不過reactor模式真是糾結。
gevent:異步協程模式的網絡庫。
sacpy:強大的網絡庫,基本啥都能幹。
pyzmq:我一直不以爲zeromq是一個mq。我以爲他是一個抽象網絡層。
web容器
python web框架的一大特色,是容器/框架/ORM/template能夠分開本身玩。
注意,容器和框架是兩碼事情。容器是python web運行的環境,框架是解析環境的玩意。二者間通常都使用wsgi接口進行鏈接。這是python的標準作法,fastcgi/scgi也會被轉換爲wsgi進行鏈接。可是也不是沒有其餘選擇。通常咱們有如下模式:
cgi:python-doc中自帶了cgi模塊。
mod_python:embed in apache。
下面是wsgi接口的容器。wsgi的優勢在於咱們能夠在這些容器上運行任意一款支持wsgi的框架。
flup:支持提供fastcgi, scgi, AJP接口,web server能夠用這三種協議進行鏈接。
Google App Engine:PaaS服務。
Gunicorn:直接提供http服務。
mod_wsgi:使用內部協議和apache集成。
twisted:直接提供http服務。
tornado:直接提供http服務。
uWSGI:使用內部協議和nginx集成。
werkzeug:直接提供http服務。
建議的部署模式是,用apache的,去mode_wsgi。用nginx的,去uwsgi。用GAE的,直接可用。其餘,統統轉發。
web
你能夠參考飛龍的這篇文章,裏面介紹了數種框架。你能夠統統玩一下,反正也不麻煩,而後選擇一種最適合本身的玩意。
python中有一種不得不提的玩意就是Zope。這個東西我不知道該如何評價,有興趣的本身看吧。
ORM
ORM:python的ORM系統比較單一,通常都是sqlalchemy。這個框架很是強大,可是很消耗資源。有興趣的能夠去官網上本身瞭解。偶爾也見用SQLObject的,很少。
ORM的另外一大選擇是ZODB,不過用的比較少。但願瞭解的本身去諮詢老潘。
template
python wiki上有篇文章提到了python template engine的分類和列表。做爲專精,我建議你至少玩一下string.Template,webhelpers,mako,jinja2,Genshi這幾個玩意。
爬蟲
關於python爬蟲的進階,就比較很差說。我正在寫一篇長篇blog,介紹python爬蟲的種種。不過至少來講,你須要瞭解如下幾個東西:celery,beautifulsoap,lxml,selenium,phantomjs,pyquery。
ui
gui庫的列表能夠看這裏,其中我推薦你看一下玩玩的有:PyGtk,TkInter,WxPython,Glade,pygame。
科學計算
不用廢話,你能夠看這篇文檔用Python作科學計算。做者出書了,你能夠支持一下。
圖形處理
那必然要提到的就是pil,python imaging library。另外一樣要介紹的是pydot,pygraph或者pygraphviz。這不是圖形庫,準確的說,應當是圖論庫。他可使用graphviz將圖論結構轉換爲圖像。
文檔
pygments:格式化代碼的庫,能夠將文本代碼格式化爲不一樣格式的,帶顏色的代碼。
markdown:格式化markdown文檔爲html的庫。不過我以爲實現的和標準不一致,沒用。
reStructured:docutils工具組,能夠轉換爲多種格式。
sphinx:一樣是rst的工具,能夠生成多種格式。
進階
首先,你應當去看沈遊俠在某次cpug聚會上的講話Python 編程藝術,這是python程序員進階的必讀。不過很惋惜,slide是高橋流的,自己不是爲了讓你看內容而出的。而當時的演講又沒有錄像(若是有的話,請給我一份拷貝,我會問沈遊俠能不能放出,找空間,搞定相關問題,感謝),所以理解上至關困難。不過這裏的每一句話都至關有道理,是數十年程序經驗的總結。
另外,做爲進階,你能夠適當的看python3的一些內容。Dive Into Python 3 中文版。還有pypy和cython。
做爲python進階人士,你必定要在手頭備一份經常使用發行的源碼,不要求小版本一致,至少大版本一致(2.7.x,最後一位能夠不對齊)。適當的閱讀源碼,尤爲是Objects目錄。常常從新閱讀python-doc。