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

Python 3.0 的新特性

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

Python 3.0 最終版的新特性

釋出日期:2008 年 12 月 03 日

核心和內建元件

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

  • 問題 #4387:binascii 現在拒絕接受 str 作為二進位制輸入。
  • 問題 #4073:向 build_scripts 新增 2to3 支援,重構 build_py 中的該支援。
  • 當啟用內部除錯時,IDLE 會列印“Unhandled server exception!”訊息。
  • 問題 #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:修復了 multiprocessing 示例
  • 問題 #3799:文件指出 dbm.gnu 和 dbm.ndbm 將接受字串引數作為鍵和值,這些引數在提交之前將轉換為位元組。

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

釋出日期:2008 年 11 月 20 日

核心和內建元件

  • 問題 #4349:由於 Makefile 存在錯誤,sys.path 中包含一個不存在的平臺目錄。
  • 問題 #3327:不要在 modules_by_index 列表中過度分配記憶體。
  • 問題 #1721812:二進位制集合操作和 copy() 返回輸入型別而不是適當的基礎型別。這是不正確的,因為將建立集合子類而不會呼叫其 __init__() 方法。更正後的行為使集合與列表和字典保持一致。
  • 問題 #4296:修復 PyObject_RichCompareBool,以便 "x in [x]" 的求值結果為 True,即使 x 與自身不相等。這是從 2.6 版本回歸的問題。
  • 問題 #3705:當終端不使用 UTF8 時,命令列引數無法正確解碼。

  • 問題 #4363:即使不存在 ctypes 模組,uuid.uuid1() 和 uuid.uuid4() 函式現在也能正常工作。
  • FileIO 的 mode 屬性現在始終包含"b".
  • 問題 #3799:修復 dbm.dumb 以接受字串以及位元組作為鍵。現在,字串鍵以 UTF-8 寫入。
  • 問題 #4338:修復 distutils 上傳命令。
  • 問題 #4354:修復 distutils 註冊命令。
  • 問題 #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:根據 PEP 302 的要求,凍結包的 __path__ 屬性現在是一個列表而不是字串。
  • 問題 #3727:修復了 poplib。
  • 問題 #3714:透過在適當的地方使用位元組修復了 nntplib。
  • 問題 #1210:修復了 imaplib 及其文件。
  • 問題 #4233:更改了_fileio.FileIOclose()方法在 closefd=False 的檔案物件上的語義。檔案描述符仍保持開啟狀態,但檔案物件的行為類似於已關閉的檔案。此外,FileIO物件還獲得了一個新的只讀屬性closefd.
  • 問題 #3626:在 cygwin 上,如果檔名僅包含 1 個字元,則使用不存在的指令碼名稱啟動 python 不會顯示任何內容。
  • 問題 #4176:修復了在序列化物件的__reduce__方法未為第 4 個和第 5 個項返回迭代器時發生的崩潰。
  • 問題 #3723:修復了子直譯器的初始化。
  • 問題 #4213:現在,檔案系統編碼由編解碼器子系統規範化,例如,UTF-8 將轉換為 utf-8。
  • 問題 #4200:更改了 atexit 模組,以將其狀態儲存在其 PyModuleDef atexitmodule 中。這修復了多個子直譯器中的錯誤。
  • 問題 #4237:io.FileIO() 引發了由 PyFileIOObject 結構成員初始化不足引起的無效警告。
  • 問題 #4170:序列化 collections.defaultdict 物件會導致直譯器崩潰。
  • 問題 #4146:已恢復在 OpenBSD 上的編譯。
  • 問題 #3574:compile() 錯誤地處理了編碼為 Latin-1 的原始碼。
  • 問題 #2384 和 #3975:當原始檔包含coding頭時,回溯未正確列印:顯示的行錯誤,並且未遵守編碼。
  • 問題 #3740:將模組狀態初始化為 Null。
  • 問題 #3946:PyObject_CheckReadBuffer 在 memoryview 物件上崩潰。
  • 問題 #1688:在 Windows 上,如果 input() 提示符包含非 ASCII 字元,則無法正確顯示。
  • 錯誤 #3951:預設情況下不應啟用 Py_USING_MEMORY_DEBUGGER。

  • 問題 #3664:如果 Pickler 的子類未能呼叫基類 __init__ 方法,則 pickle 模組可能會發生段錯誤。
  • 問題 #3725:telnetlib 現在完全以位元組為單位工作。
  • 問題 #4072:恢復 build_py_2to3。
  • 問題 #4014:除了宣告 Python 是成熟的之外,不要聲稱 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。
  • 錯誤 #3884:使 turtle 模組再次成為頂級模組。
  • 問題 #3547:修復了 ctypes 結構的不同整數大小的位欄位。

擴充套件模組

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

構建

  • 問題 #4120:在 VS2008 中從擴充套件模組中排除清單。
  • 問題 #4091:再次在 system32 中安裝 pythonxy.dll。
  • 問題 #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:“致命 Python 錯誤:無法從堆疊溢位中恢復” 在 Windows 除錯模式下啟用遞迴限制檢查程式碼時很容易遇到,這是由於啟用 USE_STACKCHECK 時對遞迴限制的錯誤處理造成的。
  • 問題 3639: 當將意外型別作為引數傳遞時,_warnings 模組可能會導致直譯器段錯誤。
  • 問題 #3712:memoryview 物件存在引用洩漏,並且不支援迴圈垃圾回收。
  • 問題 #3668:修復了 PyArg_ParseTuple 和相關函式中 “s*” 引數解析器的記憶體洩漏,當正確解析 “s*” 的引數但後續引數解析失敗時會發生此問題。
  • 問題 #3611:當 __del__ 方法重新引發異常時,在複雜的模式中可能清除異常的 __context__。
  • 問題 #2534:將 isinstance() 和 issubclass() 的速度提高 50-70%,以便在存在 __instancecheck__ / __subclasscheck__ 機制的情況下,達到 Python 2.5 的速度。在此過程中,修復了一個錯誤,當給定一個類元組作為第二個引數時,isinstance() 和 issubclass() 會在元組上而不是在每個型別物件上查詢 __instancecheck__ / __subclasscheck__。
  • 問題 #3663:在列印 SyntaxErrors 時,Py_None 被遞減引用。
  • 問題 #3651:修復了在使用緩衝區介面或當 PyArg_ParseTuple 的 “s#” 程式碼獲得位元組物件時發生的各種記憶體洩漏。
  • 問題 #3657:修復了在 pickle longs 時未初始化的記憶體讀取。由 valgrind 發現。
  • 應用來自 Apple 的安全補丁。
  • 修復了使用 failmalloc 發現的記憶體分配失敗導致的崩潰。
  • 修復了使用 valgrind 發現的記憶體洩漏,並更新了抑制檔案。
  • 修復了 opt 模式下的編譯器警告,這些警告會導致無效的記憶體讀取。
  • 修復了 pychecker 報告的在 decimal 模組中使用錯誤名稱的問題。
  • 問題 #3650:修復了 bytes.split('x') 中的引用洩漏。
  • bytes(o) 現在會嘗試使用 o.__bytes__(),然後再使用回退方案。
  • 問題 #1204:configure 指令碼現在會測試在連結 readline 時可能需要的其他庫。這修復了一些平臺(一些 Linux 發行版和 OpenBSD)上 x86_64 構建的問題。

C API

  • 添加了 PyObject_Bytes 和 PyBytes_FromObject。

  • 問題 #3756:使 re.escape() 能夠處理位元組和 str。
  • 問題 #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。
  • 刪除了對駝峰命名法 threading API 名稱的棄用警告。
  • 問題 #3110:由於缺少 SEM_VALUE_MAX,multiprocessing 在 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:如果配置了 --without-threads,則無法構建 python。
  • 問題 #3791:從 Windows 安裝程式中刪除 bsddb 模組,並從 Windows 構建檔案中刪除核心 bsddb 庫。

Python 3.0b3 中的新功能?

釋出日期:2008 年 8 月 20 日

核心和內建元件

  • 問題 #3653:修復了當 sys.excepthook 被呼叫時,如果使用了無效的引數,會導致段錯誤。

  • 問題 #2394:實現了更多 memoryview API,但需要注意的是,目前僅支援和練習一維連續緩衝區。添加了切片、切片賦值和比較(相等和不相等)。此外,還實現了 tolist() 方法,但僅適用於位元組緩衝區。最後,已更新 API 以在返回 bytearray 的地方返回 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() 被設為直譯器的私有 API,以便能夠為 Python 3.1 改進它們的介面。

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

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

  • 問題 #1276:為 CJK Mac 編碼添加了臨時別名,以解決 MacOS 上 CJK 區域設定的構建問題。它為與 Mac 編碼幾乎相容的現有舊編解碼器添加了四個臨時對映。它們將在 3.1 中被正確實現的編解碼器替換。
  • 問題 #3614:更正了 xmlrpc.client 中的一個拼寫錯誤,導致 NameError “未定義全域性名稱 'header'”。
  • 問題 #2834:更新正則表示式庫以匹配 py3k 的 unicode 標準。換句話說,混合使用位元組和 unicode 字串(無論是作為模式、搜尋字串還是替換字串)都會引發 TypeError。此外,unicode 模式會自動啟用 re.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:在電子郵件包中,由於正則表示式的二次或指數行為,內容型別解析會掛起病態輸入。
  • 問題 #3476:透過新的 “io” 庫進行的二進位制緩衝讀取現在是執行緒安全的。
  • 問題 #1342811:修復了 Tkinter.Menu.delete 中的洩漏。與選單條目關聯的命令未被刪除。
  • 從 tarfile.py 中刪除 TarFileCompat 類。
  • 問題 #2491:os.fdopen 現在幾乎是內建 open() 的別名,並接受相同的引數。它只是檢查其第一個引數是否為整數。
  • 問題 #3394:當傳遞檔名而不是 ZipInfo 例項時,zipfile.writestr 會設定外部屬性,因此檔案在 Unix 下以模式 0600 而不是 000 提取。
  • 問題 #2523:修復了在讀取二進位制檔案而不請求特定長度時出現的二次行為。

擴充套件模組

  • 錯誤 #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 返回小的 long。
  • 異常回溯現在支援異常連結。

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

C API

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

工具/演示

  • 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:修復了當解組許多程式碼物件時(當匯入大型 .pyc 檔案(約 1000 個函式)時會發生這種情況)出現的 ValueError“超出遞迴限制”錯誤。
  • 問題 #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 的錯誤。
  • --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包。它由以下程式碼組成:urllib2包。它由以下程式碼組成:, urlparse, robotparseris_keywordarg()。舊模組均已被移除。新包有五個子模組:urllib.parseurllib.request, urllib.response, urllib.error, urllib.robotparseris_keywordarg()urllib.request.urlopen()函式使用來自的 url 開啟器。(請注意,單元測試在 beta 版中尚未重新命名,但將來會重新命名。)urlparserfc822 已被移除,取而代之的是 email 包。
  • mimetools 已被移除,取而代之的是 email 包。
  • 補丁 #2849:從標準庫中移除 rfc822 模組的使用。
  • 添加了 io.StringIO 的 C 最佳化實現。
  • pickle
  • --with-toolbox-glue模組現在會自動使用 Pickler 和 Unpickler 的最佳化 C 實現(如果可用)。不再需要cPickle模組。移除了
  • htmllibsgmllib模組。已棄用的
  • SmartCookieSimpleCookiesgmllib類已從http.cookies中移除。.
  • --with-toolbox-gluecommands模組已被移除。它的 getoutput() 和 getstatusoutput() 函式已移動到subprocess模組中。
  • --with-toolbox-glue建立了http包;它包含舊的httplib,為, http.clienthttplib中移除。, ,以及httplibCookiecookielibhttp.cookiejar.
  • --with-toolbox-glue和三個httpHTTPServer模組的內容,為http.server。xmlrpc 包包含舊的xmlrpclibsgmllib模組,為xmlrpc.client.
  • --with-toolbox-glue和舊的SimpleXMLRPCServersgmllibDocXMLRPCServer的內容,為xmlrpc.server。建立了dbm包,其中包含舊模組anydbm), 包,其中包含舊模組whichdb), ,位於其包,其中包含舊模組和舊的__init__.py中,並具有包,其中包含舊模組dbm.gnu(以前是
  • --with-toolbox-gluegdbm)、dbm.bsd.
  • --with-toolbox-glue(以前是dbhash
  • dbm.ndbm)和dbm.dumb
  • (以前是dumbdbm)作為子模組。repr模組已重新命名為
  • reprlib
  • --with-toolbox-glue。statvfs)、模組已移除。.
  • 問題 #1713041:修復了 pprint 對最大深度的處理。
  • --with-toolbox-glue問題 #2250:在評估 rlcompleter 的dbhash
  • --with-toolbox-glueCompleter.complete())、方法中的名稱期間引發的異常現在會被捕獲並忽略。.
  • 補丁 #2659:向 textwrap 的TextWrapper類添加了break_on_hyphens選項。問題 #2487:更改了當 n 太大而無法放入 C long 中時,math.ldexp(x, n) 的語義。如果 n 很大且為負數,ldexp(x, n) 現在返回零(具有適當的符號);以前,它會引發 OverflowError。sgmllibConfigParser.
  • 模組已重新命名為
  • configparser
  • 。問題 #2865:webbrowser.open() 在 KDE 環境中再次工作。
  • multifile
  • 模組和
  • SocketServer
  • 模組已重新命名為
  • socketserver
  • 。修復了
  • collections
  • 上的
  • __all__
  • 設定,以包括
  • UserList
  • UserString

工具/演示

  • 。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:修復了當 exec() 執行的程式碼引發異常,並且 sys.stdout.flush() 也引發錯誤時出現的 SystemError“未設定異常的錯誤返回”錯誤。

  • 錯誤 #2565:型別物件的 repr() 現在將其稱為“類”,而不是“型別” - 無論它們是否是內建型別。
  • 命令列處理已轉換為儘可能以未修改的方式傳遞 Unicode 字串;因此,與命令列引數相關的 C API 已更改為使用 wchar_t。
  • 原始字串中的所有反斜槓都按字面意思解釋。這意味著 'u' 和 'U' 轉義不會被特殊處理。
  • ctypes 物件現在支援 PEP3118 緩衝區介面。
  • 問題 #2682:ctypes 回撥函式現在不再包含對自身的迴圈引用。
  • 問題 #2058:刪除 buf 屬性,並向 TarInfo 類新增 __slots__,以減少 tarfile 的記憶體使用。

錯誤 #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 日
  • 修復了 dictobject.c 中的一個小的記憶體洩漏。直譯器關閉時,空閒列表的內容沒有被釋放。
  • 將方法和內建函式物件的空閒列表限制為每個 256 個條目。
  • 補丁 #1953:添加了sys._compact_freelists()和 C API 函式PyInt_CompactFreeListsgmllibPyFloat_CompactFreeList用於壓縮預分配的 int 和 float 的內部空閒列表。
  • 錯誤 #1983:修復了 fork()、fork1() 和 forkpty() 呼叫的返回型別。Python 期望返回型別為 int,但 fork 系列返回 pi_t。
  • 問題 #1678380:修復了在同一程式碼單元中出現 0j 和 -0j 時識別它們的錯誤。
  • 問題 #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:將 SyntaxError 中的源行解碼回其原始源編碼。
  • inspect.getsource() 再次包含裝飾器。
  • 錯誤 #1713:posixpath.ismount() 聲稱指向掛載點的符號連結是掛載點。
  • 修復 utf-8-sig 增量解碼器,當饋送到解碼器的第一個塊以 BOM 開頭,但長度超過 3 個位元組時,該解碼器無法識別 BOM。

擴充套件模組

  • itertools ifilter()、imap() 和 izip() 的程式碼已移動到 bultins 並重命名為 filter()、map() 和 zip()。此外,將 izip_longest() 重新命名為 zip_longest(),將 ifilterfalse() 重新命名為 filterfalse()。
  • 問題 #1762972:將 reload() 函式作為 imp.reload() 重新新增。
  • 錯誤 #2111:當嘗試寫入使用 PROT_READ 開啟的塊時,mmap 會出現段錯誤。
  • 問題 #2063:更正 Windows 上 os.times() 結果中 utime 和 stime 的順序。

  • Weakref 字典現在繼承自 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。當從其 __conform__ 值重新建立物件時,sqlite3 返回 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 來發布有關 bytes/buffer 和 str 之間某些操作的警告(對於錯誤,使用 -bb),如 str(b'') 和比較。
  • 當 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 作為引數。
  • Python.h 不再包含 intobject.h。其餘部分已移動到 longobject.h。它仍然存在以定義從 PyInt 到 PyLong 函式的幾個別名。
  • 刪除了 sys.maxint,改用 sys.maxsize。

擴充套件模組

  • 刪除了 hotshot 效能分析器;請改用 cProfile

  • 使用 testfile() 載入外部檔案時,如果定義了 __loader__,則會忽略傳入的 encoding 引數,並強制將源設定為 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 模組已被移除。

平臺

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

工具/演示

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