注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請啟用 JavaScript 以獲得完整體驗。

Python 1.6.1

Python 1.6.1

注意:請檢視 下載頁面 以獲取更新的版本。

新增功能?

Python 1.6 是在 CNRI 開發的最後一個版本,也是 CNRI 釋出的唯一一個帶有開源許可證的版本。在釋出 Python 1.6 之後,以及 Guido van Rossum 離開 CNRI 與商業軟體開發人員合作之後,很明顯,能夠在 GNU 通用公共許可證 (GPL) 下使用 Python 是非常理想的。CNRI 和自由軟體基金會 (FSF) 進行了互動,以制定啟用 Python 許可證的措辭更改。Python 1.6.1 與 Python 1.6 基本相同,只有一些小的錯誤修復,並且具有 GPL 相容許可證。

注意:根據 CNRI 的說法,Python 1.6.1 是 GPL 相容的,但是 FSF 的律師 表示 Python 1.6.1 與 GPL 不相容。CNRI 不同意,並表示 FSF 的律師已告知 CNRI 的律師 1.6.1 與 GPL “不不相容”。

下載

Python 1.6.1 現已可供下載。它在 CNRI 開源 GPL 相容許可證下發布。

Windows 使用者注意事項: 某些瀏覽器會刪除下載的安裝程式檔案的“.exe”字尾。如果您遇到這種情況,只需將下載的檔案重新命名為“python16.exe”,然後雙擊它以執行安裝程式。此外,如果您曾經安裝過舊版本的 Python(尤其是 PythonWare 的發行版),則可能必須從 autoexec.bat 中刪除對其的引用。不相容警告: 當呼叫 os.popen*() 系列中的函式時,Norton Antivirus 2000 可能會導致 Windows 98 上的藍色畫面崩潰。要防止此問題,請在使用 Python 時停用 Norton Antivirus。(在帶有 Norton Antivirus 版本 6.10.20 的 Windows 98 第二版上已確認。相同的 Norton Antivirus 版本在 Windows 2000 上沒有此問題。Windows 98SE 上的 Norton Antivirus 版本 5 也沒有此問題。)

錯誤和補丁

要報告錯誤,請始終使用 SourceForge Bug Tracker。如果您有補丁,請使用 SourceForge Patch Manager請務必說明這是 Python 1.6.1 的錯誤報告或補丁!

1.6.1 版本的新增功能是什麼?

  • 新的許可證(見上文)。
  • 已修復 C API 函式 PyList_Reverse() 中的核心轉儲。
  • 1.6 版本意外地包含了一些 .pyc 檔案;這些檔案已被刪除。

1.6 版本的新增功能是什麼?

以下是自 1.5.2 版本以來所有相關更改的列表。

原始碼不相容

一些小的庫不相容更改可能會讓您感到困惑

  • 列表的 append() 方法不再能使用多個引數呼叫。以前,它會附加一個由所有引數組成的單個元組,但這是未記錄的。要附加元組,請使用例如 l.append((a, b, c))。
  • 套接字的 connect()、connect_ex() 和 bind() 方法需要恰好一個引數。以前,您可以呼叫 s.connect(host, port),但這是未記錄的。您現在必須編寫 s.connect((host, port))。
  • str() 和 repr() 函式現在更頻繁地不同。對於長整數,str() 不再附加 'L'。因此,str(1L) == '1',以前是 '1L';repr(1L) 不變,仍然返回 '1L'。對於浮點數,repr() 現在給出 17 位精度,以確保不會丟失精度(在所有當前硬體上)。
  • 已刪除 -X 選項。內建異常現在始終是類。許多庫模組也已轉換為基於類的異常。

二進位制不相容

為 Python 1.5.x 構建的第三方擴充套件不能與 Python 1.6 一起使用;這些擴充套件必須為 Python 1.6 重新構建。

在 Windows 上,嘗試匯入為 Python 1.5.x 構建的第三方擴充套件會導致立即崩潰;對此我們無能為力。檢查您的 PYTHONPATH 環境變數!

自 1.5.2 以來的更改概述

對於此概述,我借鑑了 Andrew Kuchling 和 Moshe Zadka 的文件 “Python 2.0 中的新增功能”:http://starship.python.net/crew/amk/python/writing/new-python/

有很多新模組,並且修復了很多錯誤。下面列出了所有新模組的列表。

可能最普遍的更改是添加了 Unicode 支援。我們添加了一種新的基本資料型別,即 Unicode 字串,一個新的內建函式 unicode(),以及許多用於處理 Unicode 和編碼的 C API。有關詳細資訊,請參見檔案 Misc/unicode.txt,或 http://starship.python.net/crew/lemburg/unicode-proposal.txt

與 Unicode 支援相關的另外兩個重大更改是添加了字串方法和新的正則表示式引擎

  • 字串方法意味著您現在可以說 s.lower() 等,而不是匯入字串模組並說 string.lower(s) 等。一個特殊之處是,string.join(sequence, delimiter) 的等效項是 delimiter.join(sequence)。使用 " ".join(sequence) 來實現 string.join(sequence) 的效果;為了使此更具可讀性,請先嚐試 space=" "。請注意,split() 和 replace() 中的 maxsplit 引數的預設值已從 0 更改為 -1。
  • 新的正則表示式引擎,Fredrik Lundh 的 SRE,與舊引擎完全向後相容,實際上是使用相同的介面(“re” 模組)呼叫的。您可以透過 import pre 顯式呼叫舊引擎,或透過 import sre 顯式呼叫 SRE 引擎。SRE 比 pre 快,並且支援 Unicode(這是投入精力開發另一個新的正則表示式引擎的主要原因——這至少是第四個!)。

其他更改

其他不會破壞程式碼但值得了解的更改

即使對於深度巢狀的資料結構,刪除物件現在也是安全的。

長/整數統一:長整數可以用在 seek() 呼叫中,作為切片索引。

字串格式化(s % args)有一個新的格式化選項 '%r',它的作用類似於 '%s',但插入 repr(arg) 而不是 str(arg)。(尚未在 alpha 1 中。)

包括 Greg Ward 的 “distutils” 包:這將使安裝、構建和分發第三方包變得更加簡單。

現在有特殊的語法可以代替 apply() 函式。f(*args, **kwds) 等效於 apply(f, args, kwds)。您還可以使用變體 f(a1, a2, *args, **kwds),並且可以省略其中一個:f(*args)、f(**kwds)。

內建函式 int() 和 long() 接受一個可選的第二個引數來指示轉換基數——當然,前提是第一個引數是字串。這使得 string.atoi() 和 string.atol() 過時了。(string.atof() 已經過時了)。

當一個區域性變數被編譯器識別,但在使用時未定義時,會引發一個新的異常 UnboundLocalError。這是一個從 NameError 派生的類,因此捕獲 NameError 的程式碼仍然有效。目的是在以下示例中提供更好的診斷

x = 1
def f():
    print x
    x = x+1

這過去會在 print 語句上引發 NameError,這甚至讓有經驗的 Python 程式設計師感到困惑(特別是如果引用和對 x 的賦值之間有數百行程式碼的情況下 :-)。

您現在可以透過定義 __contains__ 方法來覆蓋 'in' 運算子。請注意,它的引數是倒序的:x in a 會導致呼叫 a.__contains__(x)。這就是為什麼名稱不是 __in__ 的原因。

異常 AttributeError 將具有更友好的錯誤訊息,例如'Spam' 例項沒有屬性 'eggs'。這可能會破壞程式碼,該程式碼期望訊息與屬性名稱完全相同。

Vladimir Marangozov 為分配記憶體設計了更合理的 C API。請參閱 mymalloc.h。

1.6 中的新模組

UserString - 從字串型別派生的基類。

distutils - 用於分發 Python 模組的工具。

robotparser - 解析 robots.txt 檔案,用於編寫網路蜘蛛。(從 Tools/webchecker/ 移動。)

linuxaudiodev - Linux 的音訊。

mmap - 將檔案視為記憶體緩衝區。(Windows 和 Unix。)

sre - 正則表示式(速度快,支援 unicode)。目前,這段程式碼非常粗糙。最終,re 模組將使用 sre 重新實現(無需更改 re API)。

filecmp - 取代舊的 cmp.py 和 dircmp.py 模組。

tabnanny - 檢查 Python 原始碼中製表符寬度依賴性。(從 Tools/scripts/ 移動。)

urllib2 - 新的、改進的但與 urllib 不相容的版本(仍然是實驗性的)。

zipfile - 讀取和寫入 zip 存檔。

codecs - 支援 Unicode 編碼器/解碼器。

unicodedata - 提供對 Unicode 3.0 資料庫的訪問。

_winreg - Windows 登錄檔訪問。

encodings - 包,提供大量標準編解碼器——目前僅適用於新的 Unicode 支援。它有一個即插即用的擴充套件機制,允許您只需將新編解碼器複製到 encodings 包目錄中即可新增新的編解碼器。亞洲編解碼器支援可能會作為單獨的發行包提供,該包基於此技術和新的 distutils 包構建。

更改的模組

readline、ConfigParser、cgi、calendar、posix、readline、xmllib、aifc、chunk、wave、random、shelve、nntplib - 小幅增強。

socket、httplib、urllib - 可選的 OpenSSL 支援(僅限 Unix)。

_tkinter - 支援 8.0 到 8.3。已刪除對 8.0 之前版本的支援。

string - 此模組的大部分現在已被棄用,因為字串具有方法。這不再使用內建的 strop 模組,而是利用新的字串方法來為 Unicode 和普通字串提供透明支援。

Windows 上的更改

安裝程式不再執行單獨的 Tcl/Tk 安裝程式;相反,它將所需的 Tcl/Tk 檔案直接安裝在 Python 目錄中。如果您已經安裝了 Tcl/Tk,這將浪費一些磁碟空間(約 4 MB),但避免了 Tcl/Tk 安裝衝突的問題,並使 Python 更容易確保 Tcl/Tk 可以找到其所有檔案。注意:alpha 安裝程式不包含文件。

現在,Windows 安裝程式預設將 Python 安裝在預設卷的 Python16 目錄下,而不是 Program FilesPython-1.6 目錄下。

工具變更

IDLE - 完全重構。請訪問 IDLE 主頁 以獲取更多資訊。(Python 1.6 alpha 1 將帶有 IDLE 0.6。)

Tools/i18n/pygettext.py - Python 版本的 xgettext(1)。一個用於 Python 編寫的應用程式國際化的訊息文字提取工具。

廢棄的模組

stdwin 以及所有使用它的模組。(如果需要,請使用 Python 1.5.2。 :-)

soundex。(Skip Montanaro 有一個 Python 版本,但它不會包含在 Python 釋出版本中。)

cmp, cmpcache, dircmp。(已替換為 filecmp。)

dump。(使用 pickle。)

find。(使用 os.walk() 可以輕鬆編碼實現。)

grep。(作為庫模組不是很有用。)

packmail。(不再有任何用途。)

poly, zmod。(這些充其量只是很差的示例。)

strop。(string 模組不再需要它。)

util。(此功能早已內建在其他地方。)

whatsound。(使用 sndhdr。)

從 1.6b1 到 1.6 的詳細變更

CNRI 許可協議的輕微變更。添加了版權宣告;當將衍生作品提供給“他人”而不是僅僅“公眾”時,才需要指出修改的性質;版本和日期已更新。新許可證有一個新的控制代碼。

添加了 Tools/compiler 包。這是由 Jeremy Hylton 領導的專案,旨在用 Python 編寫 Python 位元組碼生成器。

函式 math.rint() 已被刪除。

在 Python.h 中,添加了 "#define _GNU_SOURCE 1"。

包含 Greg Ward 的 distutils 的 0.9.1 版本(而不是 0.9 版本)。

包含 SRE 的新版本。它更穩定,並且與舊的 RE 模組更相容。不匹配的範圍用 -1 表示,而不是 None。(文件中說是 None,但 PRE 實現使用了 -1;改為 None 會破壞現有程式碼。)

winreg 模組已重新命名為 _winreg。(計劃有一個更高層次的名為 winreg 的 API,但尚未以專家可以接受的形式實現。)

預設啟用 _locale 模組。

修復了 _curses 模組的配置行。

修復了一些崩潰問題,特別是當 <file>.writelines() 使用包含非字串物件的列表時會崩潰,以及在某些情況下丟失 SyntaxError 可能導致核心轉儲。

<list>.extend() 方法現在接受任意序列引數。

如果 __str__() 或 __repr__() 返回 Unicode 物件,則會將其轉換為 8 位字串。

Unicode 字串比較不再考慮 UTF-16 編碼的特殊性;它是直接的 16 位比較。

Windows 安裝程式現在安裝 LICENSE 檔案,並且不再在登錄檔中註冊 Python DLL 版本(不再需要)。現在使用 Tcl/Tk 8.3.2。

修復了一些可移植性問題,特別是涉及 socklen_t 的編譯錯誤。

PC 配置對非微軟編譯器更加友好。