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

Python 3.0 中的新特性

(編者注:請查閱 NEWS.help 以獲取有關使用 ReST 編輯 NEWS 的資訊。)

Python 3.0 最終版中的新特性

釋出日期:2008 年 12 月 3 日

核心和內建功能

  • 問題 #3996:在 Windows 上,PyOS_CheckStack 函式會導致直譯器中止(“致命的 Python 錯誤:無法重置堆疊!”),而不是丟擲 MemoryError。
  • 問題 #3689:列表反向迭代器現在支援 __length_hint__ 而不是 __len__。行為現在與其他反向迭代器匹配。
  • 問題 #4367:當 unicodedata 模組無法匯入並且存在 N 轉義時,Python 在編譯期間會發生段錯誤。
  • 修復 _cursesmodule.c 使用 -D_FORTIFY_SOURCE=2 構建時的構建失敗。

  • 問題 #4387:binascii 現在拒絕接受 str 作為二進位制輸入。
  • 問題 #4073:向 build_scripts 新增 2to3 支援,並在 build_py 中重構該支援。
  • 當啟用內部除錯時,IDLE 會列印“未處理的伺服器異常!”訊息。
  • 問題 #4455:當兩個視窗具有相同的標題時,IDLE 未能顯示視窗列表。
  • 問題 #3741:DISTUTILS_USE_SDK 設定導致 msvc9compiler.py 丟擲異常。
  • 問題 #4433:修復了垃圾回收 _ctypes.COMError 例項時的訪問衝突。
  • 問題 #4429:修復了 ctypes 中的 UnicodeDecodeError。
  • 問題 #4373:糾正了 pickle 模組中潛在的引用洩漏,並消除了 distutils.tests.test_build_ext 中誤報的引用洩漏。
  • 問題 #4382:dbm.dumb 未指定開啟檔案的預期檔案編碼。
  • 問題 #4383:當 IDLE 無法連線到其子程序時,它將無法正確顯示錯誤訊息。

構建

  • 問題 #4407:修復導致 Windows 安裝程式中 compileall 步驟失敗的原始檔。

文件

  • 問題 #4449:修復了多程序示例。
  • 問題 #3799:文件說明 dbm.gnu 和 dbm.ndbm 將接受字串引數作為鍵和值,這些引數將在提交前轉換為位元組。

Python 3.0 釋出候選版本 3 中的新特性?

釋出日期:2008 年 11 月 20 日

核心和內建功能

  • 問題 #4349:sys.path 包含一個不存在的平臺目錄,因為 Makefile 有缺陷。
  • 問題 #3327:不要在 modules_by_index 列表中過度分配。
  • 問題 #1721812:二進位制集合操作和 copy() 返回輸入型別而不是適當的基型別。這是不正確的,因為集合子類將在未呼叫其 __init__() 方法的情況下建立。糾正後的行為使集合與列表和字典保持一致。
  • 問題 #4296:修復 PyObject_RichCompareBool,使“x in [x]”評估為 True,即使 x 不等於自身。這是 2.6 的迴歸。
  • 問題 #3705:當終端不使用 UTF8 時,命令列引數未正確解碼。

  • 問題 #4363:uuid.uuid1() 和 uuid.uuid4() 函式現在即使 ctypes 模組不存在也能工作。
  • FileIO 的 mode 屬性現在始終包含“b”.
  • 問題 #3799:修復 dbm.dumb 以接受字串和位元組作為鍵。字串鍵現在以 UTF-8 寫入。
  • 問題 #4338:修復 distutils upload 命令。
  • 問題 #4354:修復 distutils register 命令。
  • 問題 #4116:解決 ScrolledCanvas.__init__ 中的成員名稱衝突。
  • 問題 #4307:inspect.getfullargspec()返回的命名元組現在使用kwonlydefaults而不是kwdefaults.
  • 問題 #4298:修復當 pickle.loads 傳遞格式錯誤的輸入時發生的段錯誤。
  • 問題 #4283:修復 distutils 中遺留的“iteritems”呼叫。

構建

  • 問題 #4389:在“新增/刪除程式”中的解除安裝條目中新增圖示。
  • 問題 #4289:從 AdvancedDlg 中刪除取消按鈕。
  • 問題 #1656675:在 Windows 上為 .py* 檔案註冊拖放處理程式。

工具/演示

  • socketserver 模組的演示現在適用於 Python 3。

Python 3.0 釋出候選版本 2 中的新特性

釋出日期:2008 年 11 月 5 日

核心和內建功能

  • 問題 #4211:凍結包的 __path__ 屬性現在是一個列表,而不是 PEP 302 要求的字串。
  • 問題 #3727:修復了 poplib。
  • 問題 #3714:透過在適當的地方使用位元組修復了 nntplib。
  • 問題 #1210:修復了 imaplib 及其文件。
  • 問題 #4233:更改了_fileio.FileIOclose()方法在 closefd=False 的檔案物件上的語義。檔案描述符仍然保持開啟狀態,但檔案物件表現得像一個已關閉的檔案。FileIO物件還獲得了一個新的只讀屬性closefd.
  • 問題 #3626:在 cygwin 上,如果指令碼名稱只有 1 個字元長,則使用不存在的指令碼名稱啟動 python 將不會顯示任何內容。
  • 問題 #4176:修復了在 pickling 一個物件的崩潰,該物件的__reduce__方法沒有為第 4 和第 5 項返回迭代器。
  • 問題 #3723:修復了子直譯器的初始化。
  • 問題 #4213:檔案系統編碼現在由編解碼器子系統規範化,例如 UTF-8 轉換為 utf-8。
  • 問題 #4200:更改 atexit 模組以將其狀態儲存在其 PyModuleDef atexitmodule 中。這修復了多個子直譯器的問題。
  • 問題 #4237:io.FileIO() 正在引發無效警告,原因是 PyFileIOObject 結構成員初始化不足。
  • 問題 #4170:pickling 一個 collections.defaultdict 物件會導致直譯器崩潰。
  • 問題 #4146:OpenBSD 上的編譯已恢復。
  • 問題 #3574:compile() 未正確處理編碼為 Latin-1 的原始碼。
  • 問題 #2384 和 #3975:當原始檔包含coding頭時,回溯未正確列印:顯示了錯誤的行,並且未遵守編碼。
  • 問題 #3740:空初始化模組狀態。
  • 問題 #3946:PyObject_CheckReadBuffer 在 memoryview 物件上崩潰。
  • 問題 #1688:在 Windows 上,如果 input() 提示符包含非 ASCII 字元,則無法正確顯示。
  • Bug #3951:Py_USING_MEMORY_DEBUGGER 不應預設啟用。

  • 問題 #3664:如果 Pickler 的子類未能呼叫基類 __init__ 方法,則 pickle 模組可能會發生段錯誤。
  • 問題 #3725:telnetlib 現在完全以位元組工作。
  • 問題 #4072:恢復 build_py_2to3。
  • 問題 #4014:除了聲稱它是成熟的之外,不要聲稱 Python 處於 Alpha 釋出狀態。
  • 問題 #3187:新增 sys.setfilesystemencoding。
  • 問題 #3187:更好地支援“無法解碼”的檔名。程式碼由 Victor Stinner 貢獻,GvR 稍作修改。
  • 問題 #3965:透過使其成為真正的單例物件,允許重複呼叫 turtle.Screen。
  • 問題 #3911:ftplib.FTP.makeport() 可能會給出無效的埠號。
  • 問題 #3929:當資料庫無法開啟時,dbm.open() 將錯誤地引發 TypeError:“'tuple' object is not callable”,而不是預期的 dbm.error。
  • Bug #3884:再次將 turtle 模組置於頂級。
  • 問題 #3547:修復了 ctypes 結構中不同整數大小的位欄位。

擴充套件模組

  • 問題 #3659:str 的子類不能作為 SQL 引數使用。

構建

  • 問題 #4120:在 VS2008 中,從擴充套件模組中排除清單。
  • 問題 #4091:再次將 pythonxy.dll 安裝到 system32 中。
  • 問題 #4018:在 Vista 上停用“為我”安裝。
  • 問題 #4204:修復了 FreeBSD 4 上的模組構建錯誤。

工具/演示

  • 問題 #3717:修復 Demo/embed/demo.c。
  • 問題 #4072:為 build_py_2to3 新增一個 distutils 演示。

Python 3.0 釋出候選版本 1 中的新特性

釋出日期:2008 年 9 月 17 日

核心和內建功能

  • 問題 #3827:memoryview 失去了其 size 屬性,轉而使用 len(view)。
  • 問題 #3813:在 cygwin 上無法透過符號連結啟動 python.exe。
  • 問題 #3705:修復當命令列引數“-c”和“-m”給出非 ASCII 值時發生的崩潰。現在在 Linux 下行為符合預期,但在 Windows 下會在稍後失敗。
  • 問題 #3279:直譯器在匯入 site 時靜默失敗,因為 site 模組使用了當時未初始化的內建 open。
  • 問題 #3660:糾正了 str.encode() 中的引用洩漏,當編碼器不返回位元組物件時。
  • 問題 #3774:在 PyTokenizer_FindEncoding 中添加了一些額外的檢查以處理錯誤情況。
  • 問題 #3594:修復 Parser/tokenizer.c:fp_setreadl(),以便 PyTokenizer_FindEncoding() 可以透過檔案路徑或檔案指標開啟要分詞的檔案。
  • 問題 #3696:OpenBSD <= 4.4 和 Cygwin 上解析引數時出錯。在這些系統上,mbstowcs() 函式有點錯誤,必須替換為 strlen() 以計算表示多位元組字元字串所需的寬字元數。
  • 問題 #3697:在 Windows 除錯模式下,當執行遞迴限制檢查程式碼時,很容易遇到“致命的 Python 錯誤:無法從堆疊溢位中恢復”,原因是啟用 USE_STACKCHEK 時對遞迴限制的處理有誤。
  • 問題 3639:當傳入意外型別作為引數時,_warnings 模組可能會使直譯器發生段錯誤。
  • 問題 #3712:memoryview 物件存在引用洩漏,並且不支援迴圈垃圾回收。
  • 問題 #3668:修復 PyArg_ParseTuple 及其相關函式中“s*”引數解析器導致的記憶體洩漏,該洩漏發生在“s*”引數正確解析但後續引數解析失敗時。
  • 問題 #3611:異常 __context__ 可能會在涉及 __del__ 方法重新引發異常的複雜模式中被清除。
  • 問題 #2534:將 isinstance() 和 issubclass() 的速度提高 50-70%,以匹配 Python 2.5 的速度,儘管有 __instancecheck__ / __subclasscheck__ 機制。在此過程中,修復了一個錯誤,即當 isinstance() 和 issubclass() 在給定類元組作為第二個引數時,它們在元組而不是每個型別物件上查詢 __instancecheck__ / __subclasscheck__。
  • 問題 #3663:列印 SyntaxError 時 Py_None 被減去引用計數。
  • 問題 #3651:修復使用緩衝區介面或 PyArg_ParseTuple 的“s#”程式碼給定位元組物件時發生的各種記憶體洩漏。
  • 問題 #3657:修復 pickling 長整數時未初始化的記憶體讀取。由 valgrind 發現。
  • 應用來自 Apple 的安全補丁。
  • 修復使用 failmalloc 發現的記憶體分配失敗導致的崩潰。
  • 修復使用 valgrind 發現的記憶體洩漏並更新抑制檔案。
  • 修復 opt 模式下的編譯器警告,這些警告會導致無效的記憶體讀取。
  • 修復 decimal 模組中使用錯誤名稱的問題,由 pychecker 報告。
  • 問題 #3650:修復了 bytes.split('x') 中的引用洩漏。
  • bytes(o) 現在嘗試使用 o.__bytes__(),然後再使用回退。
  • 問題 #1204:配置指令碼現在測試連結 readline 時可能需要的額外庫。這修復了某些平臺(一些 Linux 發行版和 OpenBSD)上 x86_64 構建的問題。

C API

  • 添加了 PyObject_Bytes 和 PyBytes_FromObject。

  • 問題 #3756:使 re.escape() 能夠處理位元組和字串。
  • 問題 #3800:修復 formatter.py 中與 filter() 相關的問題。
  • 問題 #874900:修復 fork 後 threading 模組的行為。
  • 問題 #3535:zipfile 無法讀取一些大於 2GB 的 zip 檔案。
  • 問題 #3776:廢棄 bsddb 包,在 3.0 中移除。
  • 問題 #3762:如果 python 透過其符號連結啟動,platform.architecture() 會失敗。
  • 問題 #3660:修復 pickle 模組的 C 加速器中的記憶體洩漏。
  • 問題 #3160:“bdist_wininst”distutils 命令不起作用。
  • 問題 #1658:tkinter 在 tkinter.BaseWidget 和 tkinter.scrolledtext.ScrolledText 中迭代時更改字典大小。
  • bsddb 模組(以及 dbm.bsd 模組)已被移除。它現在在標準庫之外維護,地址為 http://www.jcea.es/programacion/pybsddb.htm
  • 問題 600362:將 parse_qs() 和 parse_qsl() 從 cgi 模組重新定位到 urlparse 模組。在舊模組中添加了 DeprecationWarning,將來將廢棄。
  • 問題 #3719:如果 Python 二進位制檔案的路徑中包含空格,platform.architecture() 會失敗。
  • 問題 3602:作為 r66135 合併的一部分,將 warnings.catch_warnings() 的引數設為僅限關鍵字。同時移除一個 DeprecationWarning。
  • 移除了 camelCase threading API 名稱的廢棄警告。
  • 問題 #3110:multiprocessing 由於缺少 SEM_VALUE_MAX 而無法在 solaris 10 上編譯。

擴充套件模組

  • 問題 #3782:os.write() 不得接受 unicode 字串。
  • 問題 #2975:當使用同一 Python 直譯器編譯多個 Visual Studio 2008 擴充套件模組時,一些環境變數會無限制地增長。
  • 問題 #3643:向 _testcapi 添加了一些額外的檢查,以防止因引數檢查不嚴格而導致段錯誤。
  • bsddb 程式碼更新到版本 4.7.3pre2。此程式碼與 Python 2.6 程式碼相同,因為目的是保持統一的 2.x/3.x 程式碼庫。Python 程式碼使用“2to3”自動翻譯。請勿手動更新 Python 3.0 中的此程式碼。更新 2.6 版本,然後執行“2to3”。
  • _bytesio 和 _stringio 模組現在編譯到 python 二進位制檔案中。
  • 問題 #3492 和 #3790:修復了 zlib 模組和 zipimport 模組使用了可變的 bytearray 物件,而它們應該使用不可變的 bytes 物件。
  • 問題 #3797:修復了 dbm、marshal、mmap、ossaudiodev 和 winreg 模組,使其返回 bytes 物件而不是 bytearray 物件。

工具/演示

  • 修復 Misc/gdbinit 以使其工作。

構建

  • 問題 #3812:如果 configure --without-threads,則無法構建 python。
  • 問題 #3791:從 Windows 安裝程式中移除 bsddb 模組,並從 Windows 構建檔案中移除核心 bsddb 庫。

Python 3.0b3 中的新特性?

釋出日期:2008 年 8 月 20 日

核心和內建功能

  • 問題 #3653:修復了當 sys.excepthook 被無效引數呼叫時發生的段錯誤。

  • 問題 #2394:實現了更多的 memoryview API,但目前只支援並使用了 One-dimensional contiguous buffers。增加了切片、切片賦值和比較(相等和不等)。此外,toList() 方法已實現,但僅適用於位元組緩衝區。最後,API 已更新,無論以前返回 bytearrays 的地方,現在都返回 bytes 物件。

  • 問題 #3560:清理新的 C PyMemoryView API,使命名在內部保持一致;新增宏 PyMemoryView_GET_BASE() 和 PyMemoryView_GET_BUFFER() 以在不依賴特定實現的情況下訪問記憶體檢視的有用屬性;移除命名不佳的 PyMemoryView() 函式(可以使用 PyMemoryView_GET_BUFFER() 代替)。

  • 作為 COM 方法的 ctypes 函式指標再次具有布林值 True。

  • 問題 #1819:具有多個命名引數的函式呼叫平均快 35%(由 pybench 測量)。

  • 未文件化的 C API PyUnicode_AsString() 和 PyUnicode_AsStringAndSize() 被設為直譯器私有,以便能夠為 Python 3.1 改進其介面。

    如果需要以位元組字串訪問 Unicode 物件的 UTF-8 表示,請改用 PyUnicode_AsUTF8String()。

  • 問題 #3460:PyUnicode_Join() 實現速度提高了 10% 到 80%,這得益於 Python 3.0 更嚴格的語義,它允許避免結果字串的連續重新分配(這也影響 str.join())。

  • 問題 #1276:為 CJK Mac 編碼添加了臨時別名,以解決 MacOS 上 CJK 區域設定的構建問題。它為現有虛擬相容 Mac 編碼的傳統編解碼器添加了四個臨時對映。它們將在 3.1 中被正確實現的編解碼器取代。
  • 問題 #3614:糾正了 xmlrpc.client 中的拼寫錯誤,導致 NameError“全域性名稱'header'未定義”。
  • 問題 #2834:更新正則表示式庫以匹配 py3k 的 Unicode 標準。換句話說,混合位元組和 Unicode 字串(無論是作為模式、搜尋字串還是替換字串)都會引發 TypeError。此外,re.UNICODE 標誌會自動為 Unicode 模式啟用,並且可以透過指定新的 re.ASCII 標誌來停用;對於位元組模式,ASCII 匹配是唯一的選項,並且嘗試為此類模式指定 re.UNICODE 會引發 ValueError。
  • 問題 #3300:使 urllib.parse.[un]quote() 預設為 UTF-8。程式碼由 Matt Giuca 貢獻。quote() 現在在引用前對輸入進行編碼,unquote() 在取消引用後進行解碼。有新的引數可以更改編碼和錯誤設定。還有新的 API 可以跳過編碼/解碼步驟。[un]quote_plus() 也受影響。
  • 問題 #2235:numbers.Number 現在阻止基於預設 id() 的雜湊的繼承,因為該雜湊機制不適用於數字型別。所有從 Number 繼承(而不是僅僅註冊到它)的具體數字型別都必須顯式提供雜湊實現,以便其例項可雜湊。
  • 問題 #2676:在 email 包中,內容型別解析因正則表示式的二次或指數行為而在病態輸入上掛起。
  • 問題 #3476:透過新的“io”庫進行的二進位制緩衝讀取現在是執行緒安全的。
  • 問題 #1342811:修復 Tkinter.Menu.delete 中的洩漏。與選單條目關聯的命令未刪除。
  • 從 tarfile.py 中刪除 TarFileCompat 類。
  • 問題 #2491:os.fdopen 現在幾乎是內建 open() 的別名,並接受相同的引數。它只檢查其第一個引數是否為整數。
  • 問題 #3394:zipfile.writestr 在傳遞檔名而不是 ZipInfo 例項時設定外部屬性,因此在 Unix 下,檔案以模式 0600 而不是 000 提取。
  • 問題 #2523:修復在不請求特定長度的情況下讀取二進位制檔案時出現的二次行為。

擴充套件模組

  • Bug #3542:支援 _msi 模組中的 Unicode 字串。

Python 3.0b2 中的新特性?

釋出日期:2008 年 7 月 17 日

核心和內建功能

  • 問題 #3008:float 型別有一個新的例項方法“float.hex”和一個新的類方法“float.fromhex”,分別用於將浮點數轉換為十六進位制字串以及從十六進位制字串轉換浮點數。
  • 問題 #3083:為 str.format() 新增 bin、oct、hex 輸出的替代 (#) 格式。這分別添加了字首 0b、0o 或 0x。
  • 問題 #3280:與 chr() 一樣,“%c”格式現在在所有配置上都接受超出基本多語言平面(高於 0xffff)的 Unicode 碼點。在“窄 Unicode”構建中,結果是一個包含 2 個碼元的字串,形成一個 UTF-16 代理對。
  • 問題 #3282:str.isprintable() 對於未定義的 Unicode 字元應返回 False。
  • 問題 #3236:從 PyLong_FromString 返回小長整數。
  • 異常回溯現在支援異常鏈。

  • 移除了 sunaudio 模組。改用 sunau。
  • 問題 #3554:ctypes.string_at 和 ctypes.wstring_at 在沒有持有 GIL 的情況下呼叫 Python API 函式,這可能導致它們失敗時出現致命錯誤。
  • 問題 #799428:修復 Tkinter.Misc._nametowidget 以解包 Tcl 命令物件。
  • 從解析器模組中移除了“ast”函式別名。
  • 問題 #3313:修復了當失敗的 dlopen() 呼叫未設定有效的 dlerror() 訊息時發生的崩潰。
  • 問題 #3258:修復了當建立指向不完整結構的 ctypes POINTER 型別時發生的崩潰。
  • 問題 #2683:修復 subprocess.Popen.communicate() 中的不一致:現在引數在任何情況下都必須是位元組物件。
  • 問題 #3145:help("modules whatever") 在嘗試載入標準庫中每個模組的原始碼時失敗,包括測試套件中使用的無效檔案。
  • gettext 庫現在始終使用 Unicode 字串作為訊息 ID 和訊息字串,並且ugettext()等已不復存在。
  • traceback 模組已擴充套件以處理鏈式異常。

C API

  • 問題 #3247:函式 Py_FindMethod 已被移除。現代型別應改用 tp_methods 槽。

工具/演示

  • Mac/Demos 目錄已被移除。
  • 所有 Mac 指令碼都已移除(包括 BuildApplet.py)。

Python 3.0b1 中的新特性?

釋出日期:2008 年 6 月 18 日

核心和內建功能

  • 問題 #3211:warnings.warn_explicit() 沒有防止其“registry”引數是除 dict 或 None 之外的任何值。還修復了當“message”和“category”都設定為 None 時錯誤處理中的一個錯誤,該錯誤觸發了匯流排錯誤。
  • 問題 #3100:糾正了在解除分配持有其引用物件最後一個(強)引用的子類化弱引用時發生的崩潰。
  • 問題 #2630:實現 PEP 3138。repr() 現在返回未轉義的可列印 Unicode 字元,要獲取物件的純 ASCII 表示,請使用 ascii()。
  • 問題 #1342:在 Windows 上,當 Python 安裝在包含非 ASCII 字元的目錄中時,無法啟動。
  • 實現 PEP 3121:新的模組初始化和終結 API。
  • 移除了已經失效的-t選項。
  • 問題 #2957:糾正了 ValueError“recursion limit exceeded”,當解組許多程式碼物件時,這發生在匯入大型 .pyc 檔案(約 1000 個函式)時。
  • 問題 #2963:修復合併疏忽,該疏忽停用了所有型別的方法快取。
  • 問題 #2964:修復 instancemethod_descr_get 中缺少的 INCREF。
  • 問題 #2895:當給定位元組物件作為關鍵字名稱時,不要崩潰。
  • 問題 #2798:當使用 PyArg_ParseTuple 解析引數時,“s”程式碼現在允許任何 Unicode 字串並返回 UTF-8 編碼的緩衝區,就像“s#”程式碼已經做的那樣。“z”程式碼也得到了糾正。
  • 問題 #2863:生成器現在具有gen.__name__屬性,該屬性等於gen.gi_code.co_name,就像func.__name___等於func.func_code.co_name。生成器的 repr() 現在也包含此名稱。
  • 問題 #2831:enumerate() 現在具有start引數。
  • 問題 #2801:修復 float.is_integer 方法中的錯誤,該錯誤有時會錯誤地引發 ValueError。
  • func_name--with-toolbox-glue選項(以及關聯的 pymactoolbox.h)已被移除。
  • 問題 #2196:hasattr() 現在允許不繼承 Exception 的異常(KeyboardInterrupt 和 SystemExit)傳播,而不是忽略它們。
  • #3021 異常重新丟擲語義已顯著改進。但是,f_exc_type、f_exc_value 和 f_exc_traceback 不能再從 Python 程式碼中訪問。
  • PyNumberMethods 的三個成員:nb_coerce、nb_hex 和 nb_oct 已被移除。

擴充套件模組

  • _winreg模組重新命名為winreg.
  • 如果平臺上存在 os.O_ASYNC 和 fcntl.FASYNC 常量,則支援它們。
  • winsound 模組中已移除對 Windows 9x 的支援。
  • 問題 #2870:cmathmodule.c 編譯錯誤。

  • symtable.Symbol 的方法is_in_tuple(), is_vararg(),以及is_keywordarg()已移除。
  • 補丁 #3133:http.server.CGIHTTPRequestHandler 在 Windows 上無法工作。
  • 一個新的urllib包已建立。它由來自urllib, urllib2, urlparse,以及robotparser的程式碼組成。舊模組已全部移除。新包有五個子模組:urllib.parse, urllib.request, urllib.response, urllib.error,以及urllib.robotparser。該urllib.request.urlopen()函式使用來自urllib2url opener

    。(請注意,單元測試在 beta 版中尚未重新命名,但將來會重新命名。)
  • rfc822 已被移除,轉而使用 email 包。
  • mimetools 已被移除,轉而使用 email 包。
  • 補丁 #2849:從標準庫中移除 rfc822 模組的使用。
  • 添加了 io.StringIO 的 C 最佳化實現。
  • func_namepickle模組現在會在可用時自動使用 Pickler 和 Unpickler 的最佳化 C 實現。cPickle模組不再需要。
  • 移除了htmllibsgmllib模組。
  • 已廢棄的SmartCookieSimpleCookie類已從http.cookies.
  • func_namecommands模組已移除。其 getoutput() 和 getstatusoutput() 函式已移至subprocess模組。
  • func_namehttp包已建立;它包含舊的httplib作為http.client, Cookie作為http.cookies, cookielib作為http.cookiejar,以及三個HTTPServer模組的內容作為http.server.
  • func_namexmlrpc包已建立;它包含舊的xmlrpclib模組作為xmlrpc.client,以及舊的SimpleXMLRPCServerDocXMLRPCServer模組的內容作為xmlrpc.server.
  • func_namedbm包已建立,包含舊模組anydbmwhichdb在其__init__.py中,並具有dbm.gnu(以前是gdbm), dbm.bsd(以前是dbhash), dbm.ndbm(以前是dbm)和dbm.dumb(以前是dumbdbm)作為子模組。
  • func_namerepr模組已重新命名為reprlib.
  • func_namestatvfs模組已移除。
  • 問題 #1713041:修復 pprint 對最大深度的處理。
  • 問題 #2250:在 rlcompleter 的Completer.complete()方法中評估名稱時引發的異常現在被捕獲並忽略。
  • 補丁 #2659:為 textwrap 的TextWrapper類添加了break_on_hyphens選項。
  • 問題 #2487:更改 math.ldexp(x, n) 的語義,當 n 太大以至於無法容納在 C long 中時。如果 n 很大且為負,ldexp(x, n) 現在返回零(帶適當的符號);以前,它會引發 OverflowError。
  • func_nameConfigParser模組已重新命名為configparser.
  • 問題 #2865:webbrowser.open() 在 KDE 環境中再次工作。
  • func_namemultifile模組已移除。
  • func_nameSocketServer模組已重新命名為socketserver.
  • 修復了__all__collections上的設定,以包含UserListUserString.
  • sre 模組已被移除。
  • Queue 模組已重新命名為 queue。
  • copy_reg 模組已重新命名為 copyreg。
  • mhlib 模組已被移除。
  • ihooks 模組已被移除。
  • fpformat 模組已被移除。
  • dircache 模組已被移除。
  • Canvas 模組已被移除。
  • Decimal 模組獲得了魔術方法 __round__、__ceil__、__floor__ 和 __trunc__,以支援 round、math.ceil、math.floor 和 math.trunc。
  • user 模組已被移除。
  • mutex 模組已被移除。
  • imputil 模組已被移除。
  • os.path.walk 已被移除,轉而使用 os.walk。
  • pdb 獲得了“until”命令。
  • test.test_support 模組已重新命名為 test.support。
  • threading 模組 API 已重新命名以符合 PEP 8。舊名稱仍然存在,但將在不久的將來移除。

工具/演示

  • bgen 工具已被移除。

構建

Python 3.0a5 中的新特性?

釋出日期:2008 年 5 月 8 日

核心和內建功能

  • 修復了在 sizeof(size_t) > sizeof(long) 的系統上 PyLong_FromSsize_t 的錯誤行為。
  • 問題 #2221:糾正了 SystemError“error return without exception set”,當 exec() 執行的程式碼引發異常且 sys.stdout.flush() 也引發錯誤時。
  • Bug #2565:型別物件的 repr() 現在將其稱為“class”,而不是“type”——無論它們是否是內建型別。
  • 命令列處理已轉換為儘可能不修改地傳遞 Unicode 字串;因此,與命令列引數相關的 C API 已更改為使用 wchar_t。
  • 原始字串中的所有反斜槓都被字面解釋。這意味著“u”和“U”轉義不會被特殊處理。

擴充套件模組

  • ctypes 物件現在支援 PEP3118 緩衝區介面。
  • 問題 #2682:ctypes 回撥函式不再包含對自身的迴圈引用。
  • 問題 #2058:移除 TarInfo 類中的 buf 屬性並新增 __slots__,以減少 tarfile 的記憶體使用。
  • Bug #2606:避免對 dict_keys 物件呼叫 .sort()。
  • 捆綁的 libffi 副本現在與最近釋出的 libffi3.0.5 版本同步,除了 Modules/_ctypes/libffi/configure.ac 中的一些小更改。

構建

  • 問題 #1496032:在 alpha 上,當 gcc 是編譯器時使用 -mieee。
  • “make install”現在是“make altinstall”的別名,以防止意外覆蓋 Python 2.x 安裝。使用“make fullinstall”強制將 Python 3.0 安裝為“python”。
  • 問題 #2544:在 HP-UX 系統上,當 gcc 用作編譯器時,連結時使用“gcc -shared”。

Python 3.0a4 中的新特性?

釋出日期:2008 年 4 月 2 日

核心和內建功能

  • Bug #2301:不要嘗試將原始碼解碼回原始編碼以獲取語法錯誤。

擴充套件模組

  • dl 模組已移除,請改用 ctypes 模組。
  • 在 _locale 模組中使用 wchar_t 函式。

  • 類 distutils.commands.build_py.build_py_2to3 可以用作 build_py 的替代品,以自動對將要安裝的模組執行 2to3。
  • 添加了新的 pickle 協議(協議 3),明確支援位元組。這是預設協議。它有意不能被 Python 2.x 解封。
  • 當 Python 2.x 寫入的 pickle 包含一個 (8 位) str 例項時,現在會將其解碼為 (Unicode) str 例項。用於執行此操作的編碼預設為 ASCII,但可以透過 Unpickler 類的兩個新關鍵字引數進行覆蓋。以前這會建立位元組例項,這通常是錯誤的:str 例項通常用於封存屬性名稱等,而且文字比二進位制資料更常見。
  • 如果 POSIX 系統不支援 CODESET 並且 LANG 未設定或不允許推斷編碼,則預設使用 ASCII 作為 locale.getpreferredencoding。
  • 問題 #1202:zlib.crc32 和 zlib.adler32 現在返回一個無符號值。
  • 問題 #719888:更新 tokenize 以使用位元組 API。generate_tokens 已重新命名為 tokenize,現在使用位元組而不是字串。添加了一個新的 detect_encoding 函式,用於根據 PEP-0263 確定原始檔編碼。tokenize 返回的令牌序列始終以指定用於解碼檔案的編碼的 ENCODING 令牌開頭。此令牌用於將 untokenize 的輸出編碼回字節。

Python 3.0a3 中的新特性?

釋出日期:2008 年 2 月 29 日

核心和內建功能

  • 問題 #2282:io.TextIOWrapper 未覆蓋 io.IOBase 的 seekable()。
  • 問題 #2115:設定 __slot__ 屬性時顯著提速。同時避免了可能發生的崩潰:抽象基類(Abstract Base Class)會嘗試訪問已註冊虛擬子類上的槽位。
  • 修復了複數在實部或虛部為無窮大或 NaN 時的 repr() 和 str()。
  • 在最高代 gc.collect() 期間清空所有自由列表,以允許 pymalloc 釋放更多記憶體區域。Python 可能會更早地將記憶體返還給作業系統。
  • 問題 #2045:修復了當 collections.defaultdict 的子類在列印時,如果其 default_factory 設定為繫結方法,會觸發無限遞迴的問題。
  • 修復了 dictobject.c 中的一個輕微記憶體洩漏。直譯器關閉時,自由列表的內容未被釋放。
  • 將方法和內建函式物件的自由列表限制為每個 256 個條目。
  • 補丁 #1953:添加了sys._compact_freelists()以及 C API 函式PyInt_CompactFreeListPyFloat_CompactFreeList用於壓縮預分配整數和浮點數的內部自由列表。
  • Bug #1983:修復了 fork()、fork1() 和 forkpty() 呼叫的返回型別。Python 期望返回型別為 int,但 fork 家族返回 pi_t。
  • 問題 #1678380:修復了當 0j 和 -0j 出現在同一個程式碼單元時,它們被識別為相同的 bug。
  • 問題 #2025:添加了 tuple.count() 和 tuple.index() 方法以符合 collections.Sequence API。
  • 修復了 Python 直譯器的多次重新初始化。longobject.c 中的小整數列表在第三次終結時導致了段錯誤。
  • 問題 #1973:bytes.fromhex('') 丟擲 SystemError。
  • 問題 #1771:從 sorted() 和 list.sort() 中移除了 cmp 引數。
  • 問題 #1969:bytearray 中的 split 和 rsplit 不一致。
  • map() 不再接受 None 作為第一個引數。請改用 zip()。
  • 問題 #1769:現在不允許 int("- 1")。
  • Object/longobject.c:long(float('nan')) 丟擲 OverflowError 而不是返回 0。
  • 問題 #1762972:如果 .py 檔案存在,__file__ 指向原始檔而不是 .pyc/.pyo 檔案。
  • 問題 #1393:如果物件不相等,object_richcompare() 返回 NotImplemented 而不是 False,以便給另一方一個機會。
  • 問題 #1692:直譯器未顯示 SyntaxError 的位置。
  • 改進了 Windows 載入擴充套件模組失敗時的一些異常訊息。現在例如,我們得到“%1 不是有效的 Win32 應用程式”而不是“錯誤程式碼 193”。還使用 Unicode 字串來處理非英語區域設定。
  • 問題 #1587:為 PyCFunctions 添加了 instancemethod 包裝器。Python C API 獲得了新的型別 PyInstanceMethod_Type 以及函式 PyInstanceMethod_Check(o)PyInstanceMethod_New(func)PyInstanceMethod_Function(im)
  • 常量 gc.DEBUG_OBJECT 和 gc.DEBUG_INSTANCE 已從 gc 模組中移除;gc.DEBUG_COLLECTABLE 或 gc.DEBUG_UNCOLLECTABLE 現在足以列印垃圾回收器考慮的相應物件列表。
  • 問題 #1573:不當使用僅限關鍵字語法導致解析器崩潰。
  • 問題 #1564:set 的實現應該特殊處理 PyUnicode 而不是 PyString。
  • 補丁 #1031213:將 SyntaxErrors 中的源行解碼回其原始源編碼。
  • inspect.getsource() 再次包含裝飾器。
  • Bug #1713:posixpath.ismount() 錯誤地聲稱指向掛載點的符號連結是掛載點。
  • 修復了 utf-8-sig 增量解碼器,當第一個提供給解碼器的塊以 BOM 開頭但長度超過 3 位元組時,它無法識別 BOM。

擴充套件模組

  • itertools 中的 ifilter()、imap() 和 izip() 的程式碼已移至 builtins 並重命名為 filter()、map() 和 zip()。此外,izip_longest() 重新命名為 zip_longest(),ifilterfalse() 重新命名為 filterfalse()。
  • 問題 #1762972:重新添加了 reload() 函式,現在是 imp.reload()。
  • Bug #2111:嘗試寫入以 PROT_READ 開啟的塊時,mmap 發生段錯誤。
  • 問題 #2063:修復了 Windows 上 os.times() 結果中 utime 和 stime 的正確順序。

  • 弱引用字典現在繼承自 MutableMapping。
  • 在 collections 模組中建立了新的 UserDict 類。它繼承自並符合 MutableMapping ABC。此外,將 UserString 和 UserList 移至 collections 模組。MutableUserString 類已移除。
  • 移除了 UserDict.DictMixin。將其所有用途替換為 collections.MutableMapping。
  • 問題 #1703:getpass() 寫入提示後應該重新整理。
  • 問題 #1585:IDLE 使用不存在的 xrange() 函式。
  • 問題 #1578:win_getpass 中的問題。

構建

  • 將 --enable-unicode 配置標誌重新命名為 --with-wide-unicode,因為 Unicode 字串無法再停用。

C API

  • 問題 #1629:將 Py_Size、Py_Type 和 Py_Refcnt 重新命名為 Py_SIZE、Py_TYPE 和 Py_REFCNT。
  • 新的 API PyImport_ImportModuleNoBlock(),其工作方式類似於 PyImport_ImportModule(),但不會在匯入鎖上阻塞(而是返回錯誤)。

Python 3.0a2 的新特性?

釋出日期:2007 年 12 月 7 日

(注意:此列表不完整。)

核心和內建功能

  • str8 現在具有與 bytes 相同的構造簽名。
  • str 和 str8 之間的比較現在對於 ==/!= 返回 False/True。sqlite3 在從其 __conform__ 值重新建立物件時返回 str8。struct 模組對於所有與字串相關的格式都返回 str8。這在此更改之前是正確的,但由於字串比較始終為 False,因此變得更加明顯。
  • PyFile_FromFile() 替換為 PyFile_FromFd(fd, name. mode, buffer, encoding, newline)
  • 修復了 imp.find_module() 以遵守 -- coding: -- 頭部。
  • __file__co_filename 更改為 unicode。路徑名使用 Py_FileSystemDefaultEncoding 解碼,並添加了新的 API 方法 PyUnicode_DecodeFSDefault(char*)
  • io.open() 和 _fileio.FileIO 增加了一個新引數 closefd。值為 false 時停用檔案描述符的關閉。
  • 添加了一個新選項 -b 用於發出關於位元組/緩衝區和字串之間某些操作(如 str(b'') 和比較)的警告(-bb 用於錯誤)。
  • 當 C 執行時庫為流返回無效檔案描述符時(fileno(stdin) < 0),標準流 sys.stdin、stdout 和 stderr 可能為 None。目前這隻發生在 Windows GUI 應用程式和使用 pythonw.exe 啟動的指令碼中。
  • 添加了用於 VS 2008 的 PCbuild9 目錄。
  • 將 structmember.h 中的 WRITE_RESTRICTED 重新命名為 PY_WRITE_RESTRICTED,以解決 Windows 上與 VS 2008 的名稱衝突。
  • 未繫結方法徹底消失。ClassObject.method 返回一個普通的函式物件,instance.method 仍然返回一個繫結方法物件。繫結方法的 API 也得到了清理。im_class 屬性被移除,im_func + im_self 被重新命名為 __func__ 和 __self__。工廠 PyMethod_New 只接受 func 和 instance 作為引數。
  • intobject.h 不再被 Python.h 包含。剩餘部分已移至 longobject.h。它仍然存在以定義從 PyInt 到 PyLong 函式的幾個別名。
  • 移除了 sys.maxint,請改用 sys.maxsize。

擴充套件模組

  • 移除了 hotshot 分析器;請改用 cProfile

  • 當使用 testfile() 載入外部檔案時,如果定義了 __loader__ 並強制源為 UTF-8,則傳入的編碼引數會被忽略。
  • 方法 os.tmpnam()os.tempnam()os.tmpfile() 已被移除,推薦使用 tempfile 模組。
  • 移除了 'new' 模組。
  • 從 'types' 模組中移除了所有可以透過內建函式輕鬆訪問的型別。

Python 3.0a1 的新特性?

釋出日期:2007 年 8 月 31 日

核心和內建功能

  • PEP 3131:支援非 ASCII 識別符號。

  • PEP 3120:將預設編碼更改為 UTF-8。

  • PEP 3123:為 PyObject 使用正確的 C 繼承。

  • 移除了 __oct__ 和 __hex__ 特殊方法,並添加了 bin() 內建函式。

  • PEP 3127:八進位制字面量現在以 "0o" 開頭。舊式八進位制字面量無效。現在有以 "0b" 為字首的二進位制字面量。這也影響 int(x, 0)。

  • None、True、False 現在是關鍵字。

  • PEP 3119:isinstance() 和 issubclass() 可以被重寫。

  • 移除 BaseException.message。

  • 移除元組引數解包 (PEP 3113)。

  • 從幀中移除 f_restricted 屬性。這自然導致 PyEval_GetRestricted() 和 PyFrame_IsRestricted() 的移除。

  • PEP 3132 被接受。這意味著你可以執行a, *b = range(5)將 0 賦值給 a,將 [1, 2, 3, 4] 賦值給 b。

  • range() 現在返回一個迭代器而不是一個列表。不允許浮點數。xrange() 不再定義。

  • 補丁 #1660500:在列表推導中隱藏迭代變數,新增集合推導,並使用通用程式碼處理迭代表達式的編譯。

  • 預設情況下,!= 返回 == 的相反結果,除非後者返回 NotImplemented。

  • 補丁 #1680961:sys.exitfunc 已被移除,並由私有的 C 級別 API 替換。

  • PEP 3115:新的元類:元類現在在類語句中指定為關鍵字引數,類語句現在可以使用引數列表的完整語法。此外,元類可以實現一個 __prepare__ 函式,該函式將被呼叫以建立新類名稱空間的字典。

  • PyFloat_FromString() 中長期棄用的引數 "pend" 已被移除。

  • dir() 函式已擴充套件為在其引數上呼叫 __dir__() 方法(如果存在)。如果不存在,它將像以前一樣工作。這允許在存在 __getattr__() 的情況下自定義 dir() 的輸出。

  • 移除了對 __members__ 和 __methods__ 的支援。

  • 移除了 BaseException 上的索引/切片。

  • input() 變為 raw_input():input() 現在實現了以前稱為 raw_input() 的功能;raw_input() 不再定義。

  • 'except' 子句中列出的類必須繼承自 BaseException。

  • PEP 3106:dict.iterkeys()、.iteritems()、.itervalues() 現已消失;.keys()、.items()、.values() 返回字典檢視,其行為類似於集合。

  • PEP 3105:print 現在是一個函式。此外(不在 PEP 中),檔案的 'softspace' 屬性現已消失(因為 print() 不使用它)。此更改的一個副作用是您可能會在互動式會話中獲得不完整的輸出行。

    >>> print(42, end="")
    42>>>
    

    我們可能能夠在 I/O 庫重寫後修復此問題。

  • PEP 3102:僅限關鍵字引數。

  • Int/Long 統一已完成。內建型別 'long' 和帶有後綴 'L' 或 'l' 的字面量已移除。效能可能不理想(尚未真正進行基準測試)。

  • 'except E, V' 現在必須寫成 'except E as V',並在 except 子句末尾刪除 V;V 必須是簡單名稱。

  • 根據 PEP 3107 添加了函式註解。

  • 從 PEP 3104 添加了 nonlocal 宣告。

    >>> def f(x):
    ...     def inc():
    ...         nonlocal x
    ...         x += 1
    ...         return x
    ...     return inc
    ...
    >>> inc = f(0)
    >>> inc()
    1
    >>> inc()
    2
    
  • 將 intern() 移至 sys.intern()。

  • exec 現在是一個函式。

  • 將 nb_nonzero 重新命名為 nb_bool,將 __nonzero__ 重新命名為 __bool__。

  • 經典類已成為過去。所有類都是新式類。

  • 異常 必須 派生自 BaseException。

  • 整數除法總是返回浮點數。-Q 選項不再存在。以下所有內容都已消失:

    • PyNumber_Divide 和 PyNumber_InPlaceDivide
    • __div__、__rdiv__ 和 __idiv__
    • nb_divide、nb_inplace_divide
    • operator.div、operator.idiv、operator.__div__、operator.__idiv__ (只剩下 __truediv__ 和 __floordiv__,不確定如果我們要重用 __div__ 和類似函式如何處理它們。如果這樣做,將使編寫同時適用於 2.x 和 3.x 的程式碼變得更加困難。)
  • 'as' 和 'with' 是關鍵字。

  • 絕對匯入是 'import foo' 等的預設行為。

  • 移除了對以下語法的支援:反引號(即 x),<>。

  • 移除了這些 Python 內建函式:apply()、callable()、coerce()、execfile()、file()、reduce()、reload()。

  • 移除了這些 Python 方法:{}.has_key。

  • 移除了這些操作碼:BINARY_DIVIDE、INPLACE_DIVIDE、UNARY_CONVERT。

  • 移除了對受限執行的 C API 支援。

  • zip()、map() 和 filter() 現在返回迭代器,行為類似於它們的 itertools 對應項。這也影響 map() 在不等長序列上的行為——它現在在最短序列耗盡後停止。

  • 新增:集合字面量、集合推導、省略號字面量。

  • 根據 PEP 3129 添加了類裝飾器。

擴充套件模組

  • 移除了 imageop 模組。隨著 rgbimg 和 imgfile 的移除,其單元測試變得無用,因此它也過時了。
  • 從 operator 模組中移除了這些屬性:div、idiv、__div__、__idiv__、isCallable、sequenceIncludes。
  • 從 sys 模組中移除了這些屬性:exc_clear()、exc_type、exc_value、exc_traceback。

  • 移除了 compiler 包。改用 _ast 模組和(最終的)AST -> 位元組碼機制。
  • 移除了這些模組:audiodev、Bastion、bsddb185、exceptions、linuxaudiodev、md5、MimeWriter、mimify、popen2、rexec、sets、sha、stringold、strop、sunaudiodev、timing、xmllib。
  • 將 toaiff 模組移至 Tools/Demos。
  • 移除了過時的 IRIX 模組:al/AL、cd/CD、cddb、cdplayer、cl/CL、DEVICE、ERRNO、FILE、fl/FL、flp、fm、GET、gl/GL、GLWS、IN、imgfile、IOCTL、jpeg、panel、panelparser、readcd、sgi、sv/SV、torgb、WAIT。
  • 移除了過時的函式:commands.getstatus()、os.popen*()。
  • 移除了 string 模組中也是字串方法的函式;移除了 string.{letters, lowercase, uppercase}。
  • 移除了對長期過時平臺的支援:plat-aix3、plat-irix5。
  • 移除了 xmlrpclib.SlowParser。它基於 xmllib。
  • 補丁 #1680961:atexit 已用 C 重新實現。
  • 為 UTF-32、UTF-32-LE 和 UTF-32-BE 添加了新的編解碼器。

構建

C API

  • 移除了這些 Python 槽位:__coerce__、__div__、__idiv__、__rdiv__。
  • 移除了這些 C API:PyNumber_Coerce()、PyNumber_CoerceEx()、PyMember_Get、PyMember_Set。
  • 移除了這些 C 槽位/欄位:nb_divide、nb_inplace_divide。
  • 移除了這些宏:staticforward、statichere、PyArg_GetInt、PyArg_NoArgs、_PyObject_Del。
  • 移除了這些 typedef:intargfunc、intintargfunc、intobjargproc、intintobjargproc、getreadbufferproc、getwritebufferproc、getsegcountproc、getcharbufferproc、memberlist。

測試

  • 移除了 test.testall,因為它已被 test.regrtest 替換。

文件

Mac

  • cfmfile 模組已移除。

平臺

  • 根據 PEP 11,移除了對 BeOS 和 AtheOS 的支援。
  • 移除了對 RiscOS、Irix、Tru64 的支援(據稱)。

工具/演示

(有關舊版本的資訊,請查閱 HISTORY 檔案。)