About Python(轉)

準備

版本選擇

  • 第一個話題是版本選擇,是爲了肯定一下咱們從哪裏開始。咱們主要使用 CPython(2.7.x)—— 最多見的發行版
  • 若是有機會作 lucene / hadoop / hbase 這些 Java 界工具的相關工做,可使用 Jython(運行於 JVM 中,Java 和 Python 的混搭),性能和易用性都不錯。
  • 若是願意深刻研究 Python 實現,或者求高性能 & 好玩,能夠鼓搗一下 PyPy
  • Python 3 看起來更合理,爲何沒使用 Python 3? 由於下文提到的一些好玩好用的工具在 Python 3 中尚未被全面支持

編譯

  • 如上所述,咱們使用 CPython。常見的 C 源碼安裝方法: ./configure --prefix=<your-path> && make && make install

包管理 & 源

  • 包管理使用 pip。
    爲何不是 setuptools?由於無卸載
    爲何不是 virtualenv? 這個更科學,能夠本身搞,但咱們用 Python 多數是「玩」,沒必要這麼嚴肅
    btw: 我本身使用 ArchLinux,使用操做系統自身的包管理工具(pacman & yaourt)比 Python 的貌似更方便,若是你和我同樣,歡迎這樣搞
  • 官方源不是被牆就是速度慢,這時咱們能夠本身指定源,好比指定 V2EX 的源:pip install flask -i http://pypi.v2ex.com/simple。相似的還有豆瓣、清華等源。使用的時候默默的感謝他們一下

輔助工具

  • ipython 或 bpython 或 Python 本身的 repl,用來快速的「試」代碼,Python 經常使用函數、數據結構什麼的很是符合直覺,不少東西試一下就好了~

注意事項

  • 咱們的服務器是 CentOS,默認鏡像中 Python 依賴工具可能不全,這會致使安裝 Python 失敗或者安裝成功後某些標準庫運行不正常,這個時候須要 yum install aaa bbb ccc 後從新編譯安裝一下
  • Python 在酒店搜索 & QHotel 方面主要用於輔助 Java 世界的東西和一些小工具。無人幫助 QA 和運維,須要本身保證質量
  • 以上 & 如下提到的關鍵詞,如 pip 之類,若是此一次見,請 search google,瀏覽一眼官方文檔,若是有時間請實際操練一下 hello world

主要應用點

數據導來導去

  • 常常會有產品經理找到開發要數據,酒店的數據來源通常有:MySQL、PostgreSQL、磁盤上日誌、HDFS上日誌或表
  • MySQL 的數據須要用到 Python 鏈接 MySQL 模塊,我我的使用的是 PyMySQL,其餘的還有 MySQLDB 之類的,鏈接 PostgreSQL 我我的使用 Pyscopg2
  • HDFS 上的表或文件通常都用 Hadoop Shell 的命令,拉取到本地造成文本文件,和本地磁盤日誌等同處理
  • 導數據通常都須要 join、統計、排序什麼的,這個時候要靈活運用 Python 的標準數據結構:dict、list、set 等(這一點對於初學者必須多作幾回纔有體會)
  • Python 處理數據在環境完備的狀況下出代碼很快。Python 各類數據訪問模塊不如 JDBC 那樣一致,可是結果集能夠很方便的轉化成 dict,代碼簡潔得多
  • 若是涉及到多個 / 多種數據源,各類機器,難以申請各類互訪環境,在這種條件下導數據,須要使用到下文的 Fabric

文本處理

  • 字符串處理,Python 中有不少便捷的的字符串處理方法,而且字符串自己也是 list,這方面看書讀文檔吧
  • 正則表達式,Python 中沒有正則類型,使用的是字符串,這個和 SQL 同樣,都是語言自己以外的功夫
  • json,標準庫裏的 json 對於通常需求(處理接口數據,自動化測試對比 ...)來講就夠了,能夠和 dict 互轉。說這個要比 Java 中簡潔幾十倍並不誇張。標準庫中的 json 在我看來有一點不是很方便:對於非標準的 json(屬性不帶雙引號 or 其餘 js 引擎能正確識別的狀況),這種狀況仍是使用 nodejs 裏面的命令行工具好了
  • xml,標準庫裏面的 ElementTree 對於通常需求來講就夠了,咱們這裏在接口方面通常不使用 XML,XML 通常用在(熱發佈)配置文件。和 XML 有關的 bug、故障、delay 因素什麼的已經有好幾起了,所以,對於開發來講,熟練的掌握這個是必要的,能夠用來生成配置文件數據、檢查節點和數據完整性、檢查編碼、查找替換等
  • 天然語言處理,用 Python 寫個 trie 只需數十行代碼,用來作個簡單的詞典分詞、轉拼音什麼的很方便。NLP 這方面話題比較大,有專門的書介紹這個,之後有機會共同窗習

運維

  • fabric,在Q有個神器叫 atnodes —— 批量 ssh 工具(做者之一是萬珣新萬大師,perl 寫的),Python 世界裏有好幾個和這個對應的東西,我用過最好用並認爲最有前途的是 fabric,能夠批量運行 ssh、上傳下載、腳本化運行方面結合 Python 代碼,清晰明瞭。從其 roadmap 能夠看出有打造 Python 世界中 rake 和 chef 的趨勢。fabric 在哪兒執行最方便?固然是跳板機啦~
  • supervisor,相似 systemd、daemontools等,Python 世界中的進程管理工具,用於啓動 nginx,Python 腳本,flask web應用、gunicorn 等。純 Python 實現,有須要進程管理的就交給它吧

算法 & 機器學習

  • numpy,用來作數值計算,Python 的簡潔語法在這裏體現很是明顯
  • scikit-learn,主流機器學習算法在這裏都有,而且統一接口,易於上手,對着教材寫個 hello world 什麼的至少是很快的,別的不說,官方文檔圖文並茂,帥呆了
  • Matplotlib,數據可視化,代碼和圖圖都漂亮的就靠這個了

web

  • flask,Servlet 寫煩了有木有,Spring 過重了有木有,Jsp 一坨一坨太磕磣了有木有,Java 搭個環境一閉眼一睜眼一星期過去了有木有。試試 flask,分分鐘出 demo

小工具

  • requests,數據抓取用這個很方便,它的 slogan 是 HTTP For Human Beings,言外之一是啥,其餘庫不是給 Human Beings 用的~
  • gevent,代碼執行太慢?通常是阻塞了,gevent 基於 libev,提供相似協程的執行體,加上非阻塞 IO 模型,最潮的「併發」執行方式
  • pyparse,本身寫個 JSON diff 工具,本身寫個 Hive SQL Code Formatter 什麼的,順便複習(重學、入門)一下編譯原理
  • pyXXX,和碼農有關的 tag 前面加個 py 後搜一下,通常都會有個玩意兒,好比 pySVN 什麼的,能幹什麼?發揮本身的想象力好了~

資料推薦

如下是在 Python 方面我收集的一些電子書,我也沒有徹底讀完,但這些還都不錯,有興趣的話歡迎交流node

  • Beginning.Python.pdf
  • byte.of.python.30.pdf
  • Core.Python.Applications.Programming.3rd.pdf
  • Data.Structures.and.Algorithms.in.Python.pdf
  • Data.Structures.and.Algorithms.Using.Python.pdf
  • diveintopython.pdf
  • diveintopython3.pdf
  • Expert.Python.Programming.pdf
  • Fundamentals.of.Python--From.First.Programs.through.Data.Structures.pdf
  • Generators.pdf
  • Getting.Started.with.Pyparsing.pdf
  • Head.First.Python.pdf
  • How.to.Think.Like.a.Computer.Scientist--Learning.With.Python.pdf
  • Introduction.to.Computer.Science.Using.Python.pdf
  • Learning.Python.4th.pdf
  • Learning.Python.5th.pdf
  • Matplotlib.for.Python.Developers.pdf
  • NLP.with.Py.pdf
  • NumPy.Beginners.Guide.2nd.pdf
  • NumPy.Cookbook.pdf
  • pandas.pdf
  • Programming.Computer.Vision.with.Python.pdf
  • Py.Cookbook.chm
  • PyPy.in.Production.pdf
  • Python+學習筆記+第二版.pdf
  • python-guide.pdf
  • Python.Algorithms.pdf
  • Python.Cookbook.3rd.pdf
  • Python.for.Data.Analysis.pdf
  • Python.for.Everyone.pdf
  • Python.for.Unix.and.Linux.System.Administration.pdf
  • Python.Testing.Cookbook.pdf
  • Scipy.and.Numpy.pdf
  • The.Python.Standard.Library.by.Example.pdf
  • Think.Python.pdf
  • Thinking.In.Python.pdf
  • Violent.Python.pdf
  • 用Python作科學計算.pdf

心得

  • 以上提到這些東西是一年多以來我在酒店 Python 方面鼓搗過的東西,多數都是淺嘗輒止,可是頗有樂趣
  • 有問題先 search the f^cking web & read the f^cking manual
  • 官方文檔、華蟒郵件列表、stackoverflow 多看看。其餘 nodejs、ruby 社區也沒事兒逛逛,這些生態系統中的好東西通常均可以和 Python 一比一翻譯
  • 有些問題必定是要本身經歷親身經歷一下才知道之後如何解決的,好比丟失依賴、亂碼、第三方庫的爛坑等。遇到這些問題時,若是時間上有餘地,能夠深挖一下
  • 標準庫不給力(不強大,很差用)的狀況下通常會有個第三方包,好比 requests,還有日期處理之類的(Java 和 Python 的日期、時間處理的標準庫都很差用)
    • 其餘生態系統中好東西在 Python 世界通常都會有一份包裝,好比 PyLucene(Lucene)、Gevent(Libev),PyLibpcap(Libpcap),PyWebkit(webkit)等
相關文章
相關標籤/搜索