您在這里:首頁 ‣ 深入 Python 3 ‣
❝ 這不正是我們進來的地方嗎? ❞
— 《迷墻》
你讀過原版的 “深入 Python” 并可能甚至買了紙版的。(謝謝!)你差不多已經了解 Python 2 了。你準備好了投入到 Python 3 里面。… 如果所有這些都成立,繼續讀。(如果沒有一個是成立的,你最好從頭開始。)
Python 3 提供了一個腳本叫做 2to3。學習它。喜歡它。使用它。用 2to3 移植代碼到 Python 3 是一個有關 2to3 工具能夠自動整理的所有東西的參考手冊。很多這些東西都是語法的變更,因此了解 Python 3 里面許多的語法變更是一個好的起點。(print 現在是一個函數,`x` 不能使用,等等。)
案例分析:移植 chardet 到 Python 3 記錄了我努力(最終成功)把一個不平常的庫從 Python 2 移植到 Python 3 的過程。它也許能幫助你;也許不能。這里存在一個相當陡的學習曲線,由于你首先需要稍微理解一下這個庫,那樣你才可以理解為什么它會損壞以及我如何修復它的。圍繞字符串有很多損壞的地方。說到這個…
字符串。吆。從哪兒開始呢。Python 2 有 “strings” 和 “Unicode strings”。Python 3 有 “bytes” 和 “strings”。也就是說,現在所有字符串都是 Unicode 的字符串,那么如果你想處理一個字節包,你可以使用新的 bytes 類型。Python 3 從不會在 strings 和 bytes 之間進行隱式的轉換,因此在任何時候如果你不確信你擁有的是什么類型,你的代碼幾乎無疑的將會出問題。閱讀 Strings 的章節 了解更多細節信息。
貫穿整個這本書,Bytes 和 strings 的對比會一次又一次的出現。
encoding 參數。一些文本文件方法按照字符來計數,而另一些方法按照字節計數。如果你的代碼采取一個字符等于一個字節的方式,那么在多字節表示一個字符的情況下將會出問題。
httplib2 模塊通過 HTTP 獲取頭信息和數據。HTTP 頭信息返回的是字符串,而 HTTP 正文則返回的是字節。
pickle 模塊定義了一個和 Python 2 向后不兼容的新的數據類型。(提示:這就是因為字節和字符串的原因。) 同樣 JSON 也根本不支持字節類型。我將向你展示如何解決這個問題。
chardet 到 Python 3這章,到處都是一大堆一大堆關于字節和字符串的東西。
即使你不關心 Unicode (但實際上你會的),你也會想閱讀一下 Python 3 里面的字符串格式,這和 Python 2 里面的完全不一樣。
迭代在 Python 3 里面無處不在,比起五年之前我寫“深入Python” 的時候,我現在能更好的理解它們。你也需要理解他們,因為過去經常在 Python 2 里面返回列表的很多函數,在 Python 3 里面將返回迭代。至少,你應該閱讀一下迭代章節的下半部分和高級迭代章節的下半部分。
根據大家的要求,我已經添加了一個關于特殊方法名稱的附錄,有點像 Python 文檔的 “數據模型”章節但是包含更多的內容。
當我在撰寫“深入 Python”的時候,所有可用的 XML 庫都很糟糕。接著 Fredrik Lundh 編寫了非常優秀的 ElementTree。Python 的專家們聰明的把 ElementTree 變成了標準庫的一部分,然后現在它構成了我的新的 XML 章節的基礎。解析 XML 的那些老的方式仍然可用,但是你應該避免使用它們,因為他們很糟糕!
除此之外,還有個關于 Python 的新東西 — 不是語言上的,而是社區中的 — 像 Python 包裝索引(PyPI)的出現。Python 提供了實用工具類用來將你的代碼打包成標準格式,并分發那些包到 PyPI 中。閱讀 打包 Python 庫了解詳細信息。
© 2001–9 Mark Pilgrim