PEP 3099 – Python 3000 中不會改變的事物
- 作者:
- Georg Brandl <georg at python.org>
- 狀態:
- 最終版
- 型別:
- 流程
- 建立日期:
- 2006 年 4 月 4 日
- 釋出歷史:
摘要
有些想法就是很糟糕。雖然有些關於 Python 演變的想法具有建設性,但有些想法卻嚴重違背了 Python 的基本原則,就好比讓一個人原地打轉:它不會帶你到任何地方,即使是對於允許非凡提案的 Python 3000 也是如此。本 PEP 試圖列出 BDFL 關於 Python 3000 的所有宣告,這些宣告涉及不會發生的更改和不會引入的新功能,按主題排序,並附有簡短的解釋或指向 python-3000 郵件列表中相關執行緒的引用。
如果你認為你應該建議任何列出的想法,最好是遠離電腦,到戶外去享受一下。在漂亮草地上小睡一下的戶外活動比提出一個老生常談的想法,然後讓人們告訴你這個想法有多麼過時,要更有成效。你已經被警告了。
核心語言
- Python 3000 不會不區分大小寫。
- Python 3000 不會從頭重寫。它也不會使用 C++ 或與 C 不同的其他語言作為實現語言。相反,程式碼庫將逐漸進行改造。Joel Spolsky 有一篇很棒的文章解釋了原因:http://www.joelonsoftware.com/articles/fog0000000069.html
self不會變為隱式的。明確的self是一個_好事情_。它透過消除變數解析方式的歧義使程式碼清晰。它也使得函式和方法之間的區別很小。執行緒:“草案提案:Python 3.0 中的隱式 self” https://mail.python.org/pipermail/python-dev/2006-January/059468.html
lambda不會重新命名。曾幾何時,lambda 曾計劃在 Python 3000 中移除。不幸的是,沒有人能想出更好的方法來提供匿名函式。因此 lambda 將保留。但它將保持原樣。新增對語句的支援是不可能的。它將要求允許多行 lambda 表示式,這意味著多行表示式可能突然出現。例如,這將允許函式呼叫使用多行引數。那簡直太醜了。
執行緒:“genexp 語法 / lambda”,https://mail.python.org/pipermail/python-3000/2006-April/001042.html
- Python 將不會有可程式設計語法。執行緒:“它是一個語句!它是一個函式!它都是!”,https://mail.python.org/pipermail/python-3000/2006-April/000286.html
- 將不會有
zip()風格的並行迭代的語法。 - 字串將保持可迭代。
- 不會有語法來對生成器表示式或列表推導的結果進行排序。
sorted()涵蓋了所有用例。執行緒:“向生成器推導式新增排序”,https://mail.python.org/pipermail/python-3000/2006-April/001295.html - 切片和擴充套件切片不會消失(即使 __getslice__ 和 __setslice__ API 可能會被替換),也不會為標準物件型別返回檢視。
- 不允許在迴圈體內部重用迴圈變數。執行緒:消除迭代變數的作用域溢位 https://mail.python.org/pipermail/python-dev/2006-May/064761.html
- 解析器不會比 LL(1) 更復雜。簡單勝於複雜。這個想法也適用於解析器。將 Python 的語法限制為 LL(1) 解析器是一種恩賜,而不是詛咒。它給我們戴上了手銬,防止我們走火入魔,最終像某些其他動態語言(恕不指名,例如 Perl)一樣,出現奇怪的語法規則。
- 沒有大括號。這顯而易見,無需引用郵件列表。執行
from __future__ import braces即可獲得關於此主題的明確答案。 - 不再使用反引號。反引號 (`) 將不再用作
repr的簡寫——但這並不意味著它們可以用於其他用途。即使忽略向後相容性問題,該字元本身也會導致太多問題(在某些字型中、在某些鍵盤上、在排版書籍時等等)。執行緒:“透過反引號引入新運算子”,https://mail.python.org/pipermail/python-ideas/2007-January/000054.html
- 引用全域性名稱
foo將不會拼寫為globals.foo。global語句將保留。執行緒:“用全域性內建物件替換 globals() 和 global 語句”,https://mail.python.org/pipermail/python-3000/2006-July/002485.html,“顯式詞法作用域 (pre-PEP?)”,https://mail.python.org/pipermail/python-dev/2006-July/067111.html - 將不會有替代的繫結運算子,例如
:=。執行緒:“顯式詞法作用域 (pre-PEP?)”,https://mail.python.org/pipermail/python-dev/2006-July/066995.html - 我們不會刪除容器字面量。也就是說,{expr: expr, …}、[expr, …] 和 (expr, …) 將保留。
while和for迴圈中的else子句不會改變語義,也不會被移除。執行緒:“for/except/else 語法” https://mail.python.org/pipermail/python-ideas/2009-October/006083.html
內建函式
zip()不會增加關鍵字引數或其他機制來阻止它在最短序列結束時停止。執行緒:“讓 zip() 在序列長度不同時引發異常”,https://mail.python.org/pipermail/python-3000/2006-August/003338.htmlhash()不會成為一個屬性,因為屬性的計算應該廉價,而雜湊值不一定如此。執行緒:“將 hash 作為屬性/特性”,https://mail.python.org/pipermail/python-3000/2006-April/000362.html
標準型別
- 迭代字典將繼續生成鍵。執行緒:“迭代字典”,https://mail.python.org/pipermail/python-3000/2006-April/000283.html
執行緒:讓 iter(mapping) 生成 (key, value) 對 https://mail.python.org/pipermail/python-3000/2006-June/002368.html
- 將不會有
frozenlist型別。 int不會支援產生範圍的下標。執行緒:“xrange vs. int.__getslice__”,https://mail.python.org/pipermail/python-3000/2006-June/002450.html
編碼風格
- (推薦的)最大行寬將保持 80 個字元,對於 C 和 Python 程式碼都是如此。
互動式直譯器
- 直譯器提示符 (
>>>) 不會改變。它讓 Guido 感到溫暖和舒適。執行緒:“唾手可得的成果:改變直譯器提示符?”,https://mail.python.org/pipermail/python-3000/2006-November/004891.html
版權
本文件已置於公共領域。
來源:https://github.com/python/peps/blob/main/peps/pep-3099.rst