# Chapter -1 《深入 Python 3》中有何新內容
> " 這不正是我們進來的地方嗎? "
> — 《迷墻》
## _又叫做_ “the minus level”
你讀過原版的 “[深入 Python](http://diveintopython.org/)” 并可能甚至買了紙版的。(謝謝!)你差不多已經了解 Python 2 了。你準備好了投入到 Python 3 里面。… 如果所有這些都成立,繼續讀。(如果沒有一個是成立的,你最好[從頭開始](installing-python.html)。)
Python 3 提供了一個腳本叫做 `2to3`。學習它。喜歡它。使用它。[用 `2to3` 移植代碼到 Python 3](porting-code-to-python-3-with-2to3.html) 是一個有關 `2to3` 工具能夠自動整理的所有東西的參考手冊。很多這些東西都是語法的變更,因此了解 Python 3 里面許多的語法變更是一個好的起點。(`print` 現在是一個函數,``x`` 不能使用,等等。)
[案例分析:移植 `chardet` 到 Python 3](case-study-porting-chardet-to-python-3.html) 記錄了我努力(最終成功)把一個不平常的庫從 Python 2 移植到 Python 3 的過程。它也許能幫助你;也許不能。這里存在一個相當陡的學習曲線,由于你首先需要稍微理解一下這個庫,那樣你才可以理解為什么它會損壞以及我如何修復它的。圍繞字符串有很多損壞的地方。說到這個…
字符串。吆。從哪兒開始呢。Python 2 有 “strings” 和 “Unicode strings”。Python 3 有 “bytes” 和 “strings”。也就是說,現在所有字符串都是 Unicode 的字符串,那么如果你想處理一個字節包,你可以使用新的 `bytes` 類型。Python 3 _從不會_在 strings 和 bytes 之間進行隱式的轉換,因此在任何時候如果你不確信你擁有的是什么類型,你的代碼幾乎無疑的將會出問題。閱讀 [Strings 的章節](strings.html) 了解更多細節信息。
貫穿整個這本書,Bytes 和 strings 的對比會一次又一次的出現。
* 在[文件](files.html)這章,你將了解到通過“二進制”模式和“文本”模式讀取文件的區別;在文本模式下讀取(和寫入!)文件需要提供一個 `encoding` 參數。一些文本文件方法按照字符來計數,而另一些方法按照字節計數。如果你的代碼采取一個字符等于一個字節的方式,那么在多字節表示一個字符的情況下_將會_出問題。
* 在 [HTTP Web 服務](http-web-services.html)這章,`httplib2` 模塊通過 HTTP 獲取頭信息和數據。HTTP 頭信息返回的是字符串,而 HTTP 正文則返回的是字節。
* 在[序列化 Python 對象](serializing.html)這章,你將了解到為什么 Python 3 里面的 `pickle` 模塊定義了一個和 Python 2 向后不兼容的新的數據類型。(提示:這就是因為字節和字符串的原因。) 同樣 JSON 也根本不支持字節類型。我將向你展示如何解決這個問題。
* 在[案例分析:移植 `chardet` 到 Python 3](case-study-porting-chardet-to-python-3.html)這章,到處都是一大堆一大堆關于字節和字符串的東西。
即使你不關心 Unicode (但實際上你會的),你也會想閱讀一下 [Python 3 里面的字符串格式](strings.html#formatting-strings),這和 Python 2 里面的完全不一樣。
迭代在 Python 3 里面無處不在,比起五年之前我寫“深入Python” 的時候,我現在能更好的理解它們。你也需要理解他們,因為過去經常在 Python 2 里面返回列表的很多函數,在 Python 3 里面將返回迭代。至少,你應該閱讀一下[迭代章節的下半部分](iterators.html#a-fibonacci-iterator)和[高級迭代章節的下半部分](advanced-iterators.html#generator-expressions)。
根據大家的要求,我已經添加了一個關于[特殊方法名稱](special-method-names.html)的附錄,有點像 [Python 文檔的 “數據模型”章節](http://www.python.org/doc/3.1/reference/datamodel.html#special-method-names)但是包含更多的內容。
當我在撰寫“深入 Python”的時候,所有可用的 XML 庫都很糟糕。接著 Fredrik Lundh 編寫了非常優秀的 [ElementTree](http://effbot.org/zone/element-index.htm)。Python 的專家們聰明的把 [ElementTree 變成了標準庫的一部分](http://docs.python.org/3.1/library/xml.etree.elementtree.html),然后現在它構成了[我的新的 XML 章節](xml.html)的基礎。解析 XML 的那些老的方式仍然可用,但是你應該避免使用它們,因為他們很糟糕!
除此之外,還有個關于 Python 的新東西?—?不是語言上的,而是社區中的?—?像 [Python 包裝索引](http://pypi.python.org/)(PyPI)的出現。Python 提供了實用工具類用來將你的代碼打包成標準格式,并分發那些包到 PyPI 中。閱讀 [打包 Python 庫](packaging.html)了解詳細信息。
- 版權信息
- Chapter -1 《深入 Python 3》中有何新內容
- Chapter 0 安裝 Python
- Chapter 1 你的第一個 Python 程序
- Chapter 2 內置數據類型
- Chapter 3 解析
- Chapter 4 字符串
- Chapter 5 正則表達式
- Chapter 6 閉合 與 生成器
- Chapter 7 類 & 迭代器
- Chapter 8 高級迭代器
- Chapter 9 單元測試
- Chapter 10 重構
- Chapter 11 文件
- Chapter 12 XML
- Chapter 13 序列化Python對象
- Chapter 14 HTTP Web 服務
- Chapter 15 案例研究:將chardet移植到Python 3
- Chapter 16 打包 Python 類庫
- Chapter A 使用2to3將代碼移植到Python 3
- Chapter B 特殊方法名稱
- Chapter C 接下來閱讀什么?