[Python] python入門指引

來源:互聯網
上載者:User
轉載自ref:  http://shell909090.com/blog/2012/11/python%e5%85%a5%e9%97%a8%e6%8c%87%e5%bc%95/
python入門指引


發表於 2012
年 11 月 19 日

前言

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

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

基本知識

首先,你要瞭解一個事情。很多你不會的東西並不屬於python。例如你不知道網路通訊的流程,你不知道檔案的許可權和開啟標誌用法,你不知道fork和stdin/stdout的關係。這些python教不會你。如果你缺乏這些和語言/庫無關的相關知識,請自行補課。如果你缺乏電腦基礎理論,請自行補課。

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

入門

在網路上,python入門的兩大基礎書籍分別是(後面有朋友補充了一本,我也加上):

  • A Byte of Python 中文版
  • Dive Into Python 中文版
  • Learn Python The Hard Way, 2nd Edition 中文版

後面基本就是看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 中文版。還有pypy和cython。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.