Python入門指引

jopen 10年前發布 | 56K 次閱讀 Python Python開發

前言

其實我也不知道python怎么入門,由我來寫這個真的不是很合適。我學python是直接找了dive into python來看。然后照著寫了幾個例子。大概兩天后,就能磕磕絆絆的上路了。就好像拿筷子,都不記得怎么學會的拿筷子,怎么來教人呢?

不過最近在python-cn的列表里面,我大概連續數周都持續看到“python入門看哪本教程比較好”,實在是不堪其擾。干脆就寫個簡單的guide,有心的人自己看。沒心的——那我也沒辦法了。

基本知識

首先,你要了解一個事情。很多你不會的東西并不屬于python。例如你不知道網絡通訊的流程,你不知道文件的權限和打開標志用法,你不知道fork和 stdin/stdout的關系。這些python教不會你。如果你缺乏這些和語言/庫無關的相關知識,請自行補課。如果你缺乏計算機基礎理論,請自行補課。

因此不要隨便給我發郵件/留言/咨詢,為什么這個問題在python里無法解決。為什么python無法所見即所得,為什么python無法熱部署,為什么python無法用于嵌入式開發。在問這個問題之前,請先確認“這是一個python的問題”。例如GIL,或者腦殘lambda。如果你不確定,請自己搜索一下相關的文章,確認一下。在提問前,看看“提問的智慧”。如果你確實搜過了,找不到,那就問吧,沒辦法。

入門

在網絡上,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:異步協程模式的網絡庫。
  • Scapy:強大的網絡庫,基本啥都能干。
  • 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 中文版。還有pypycython

作為python進階人士,你一定要在手頭備一份常用發行的源碼,不要求小版本一致,至少大版本一致(2.7.x,最后一位可以不對齊)。適當的閱讀源碼,尤其是Objects目錄。經常重新閱讀python-doc。

轉載自ref:  http://shell909090.com/blog/2012/11/python%e5%85%a5%e9%97%a8%e6%8c%87%e5%bc%95/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!