你可能會問的第一個問題就是:“我的軟件應該支持Python的哪些版本?”這是一個好問題,因為Python的每個新版本都會在引入新功能的同時棄用一些舊功能。而且,Python 2.x和Python 3.x之間有著**巨大**的差別,這兩個分支之間的變化如此巨大,以至于很難讓代碼同時兼容二者。本書后面的章節會詳細討論,而且在剛開始一個新項目的時候很難說哪個版本更合適。
下面是一些簡短的回答。
- 2.5版本及更老的版本目前實際上已經廢棄了,所以不需要再去支持它們。如果實在想支持這些較老的版本,要知道再讓程序支持Python 3.x會更加困難。如果你確實有可能會遇到一些安裝了Python 2.5的老系統,那很遺憾,真沒什么好辦法。
- 2.6版本越來越沒活力,可以在某些比較老的操作系統(如Red Hat企業版Linux,即Red Hat Enterprise Linux)上發現。同時支持Python 2.6版本和更新的版本并不太難,但是,如果你認為自己的程序可能不需要在2.6版本上運行,那就沒必要強迫自己支持它了。
- 2.7版本目前是也將依然是Python 2.x的最后一個版本。因為目前仍然有很多軟件、庫和開發人員在使用它,所以將其作為主要版本之一來支持是正確的選擇。Python 2.7將被繼續支持到2020年,所以它很可能不會很快消失。
- 3.0、3.1和3.2版本發布后都被快速地更替,并沒有被廣泛采用。如果你的代碼已經支持2.7版本,再支持這幾個版本的意義并不大。
- 3.4和3.5版本是Python 3最近發行的兩個版本,也是應該重點支持的版本。Python 3.5代表這門語言的未來,所以除非正專注于兼容老的版本,否則都應該先確保代碼能夠運行在這兩個最新版本上。
總而言之,只在確實需要(或者想自我挑戰)的情況下支持2.6版本,必須支持2.7版本,如果想保證軟件在可預見的未來也能運行,就需要也支持3.4及更高的版本。忽略那些更老的Python版本基本沒什么問題,盡管同時支持所有這些版本是有可能的:CherryPy項目(<http://cherrypy.org>)支持Python 2.3及所有后續版本(<http://docs.cherrypy.org/stable/intro/install.html>)。
編寫同時支持Python 2.7和3.x版本的程序的方法將在第15章介紹。某些方法在后續的示例代碼中也會涉及,本書中的所有示例代碼都同時支持這兩個主要版本。
- 內容提要
- 中文版序
- 前言
- 第1章 項目開始
- 1.1 Python版本
- 1.2 項目布局
- 1.3 版本編號
- 1.4 編碼風格與自動檢查
- 1.5 Joshua Harlow訪談
- 第2章 模塊和庫
- 2.1 導入系統
- 2.2 標準庫
- 2.3 外部庫
- 2.4 框架
- 2.5 Doug Hellmann訪談
- 第3章 管理API變化
- Christophe de Vienne訪談
- 第4章 時區陷阱
- 第5章 文檔
- 5.1 Sphinx和reST入門
- 5.2 Sphinx模塊
- 5.3 擴展Sphinx
- 第6章 分發
- 6.1 簡史
- 6.2 使用pbr打包
- 6.3 Wheel格式
- 6.4 包的安裝
- 6.5 和世界分享你的成果
- 6.6 Nick Coghlan訪談
- 6.7 入口點
- 6.7.1 可視化的入口點
- 6.7.2 使用控制臺腳本
- 6.7.3 使用插件和驅動程序
- 第7章 虛擬環境
- 第8章 單元測試
- 8.1 基礎知識
- 8.2 fixture
- 8.3 模擬(mocking)
- 8.4 場景測試
- 8.5 測試序列與并行
- 8.6 測試覆蓋
- 8.7 使用虛擬環境和tox
- 8.8 測試策略
- 8.9 Robert Collins訪談
- 第9章 方法和裝飾器
- 9.1 創建裝飾器
- 9.2 Python中方法的運行機制
- 9.3 靜態方法
- 9.4 類方法
- 9.5 抽象方法
- 9.6 混合使用靜態方法、類方法和抽象方法
- 9.7 關于super的真相
- 第10章 函數式編程
- 10.1 生成器
- 10.2 列表推導
- 10.3 函數式函數的函數化
- 第11章 抽象語法樹
- 11.1 用抽象語法樹檢查來擴展flake8
- 11.2 Hy
- 11.3 Paul Tagliamonte訪談
- 第12章 性能與優化
- 12.1 數據結構
- 12.2 性能分析
- 12.3 有序列表和二分查找
- 12.4 namedtuple和slots
- 12.5 memoization
- 12.6 PyPy
- 12.7 通過緩沖區協議實現零復制
- 12.8 Victor Stinner訪談
- 第13章 擴展與架構
- 13.1 多線程的注意事項
- 13.2 多進程與多線程
- 13.3 異步和事件驅動架構
- 13.4 面向服務架構
- 第14章 RDBMS和ORM
- 14.1 用Flask和PostgreSQL流化數據
- 14.2 Dimitri Fontaine訪談
- 第15章 Python 3支持策略
- 15.1 語言和標準庫
- 15.2 外部庫
- 15.3 使用six
- 第16章 少即是多
- 16.1 單分發器
- 16.2 上下文管理器
- 第17章 延伸閱讀
- 版權信息
- 版權聲明
- 歡迎來到異步社區!
- 異步社區的來歷
- 社區里都有什么?
- 購買圖書
- 下載資源
- 與作譯者互動
- 靈活優惠的購書
- 紙電圖書組合購買
- 社區里還可以做什么?
- 提交勘誤
- 寫作
- 會議活動早知道
- 加入異步