Python 3 既是激進的又是剋制的,這些提議被否決了

[譯]PEP 3099--Python 3 中不會改變的事情

導語: Python 3.8 已經發布了,引進了很多變動點。關於 3.9 預計引入的修改,也披露了一些。咱們以前還關注過 GIL 的移除計劃Guido 正在開發的新解析器 等話題,這意味 Python 頗有活力,仍在健康地發展着。html

Python 3 是比較大膽激進的,拋棄了前一版本的不少陳舊的包袱,但同時,它也是相對剋制的(一直如此),社區裏提出的不少提議都被否決了。前不久,我分享的Python 設計和歷史的 27 個問題 提到了一些沉澱下來的設計問題,今天這篇譯文則聚焦於官方明確否決掉的 24 個設計問題。python

大部分問題都是細枝末節(例如大小寫、括號、反引號、行寬等等),但細究起來的話,也會挺有意思,歡迎留言討論。git


PEP原文: https://www.python.org/dev/pe...
PEP標題: Things that will Not Change in Python 3000
PEP做者: Georg Brandl
建立日期: 2006-04-04
譯者豌豆花下貓Python貓 公衆號做者)
翻譯計劃https://github.com/chinesehua...github


目錄

  • 概要
  • 語言核心
  • 內置對象
  • 標準類型
  • 編碼風格
  • 交互式解釋器
  • 版權

概要

有些想法很糟糕。儘管關於 Python 演化的某些想法具備建設性,但很多想法卻與 Python 的基本原則背道而馳,就像是讓人圍着圈跑步:哪也去不了,即便 Python 3000 容許提出特別的建議,也無論用。編程

此 PEP 嘗試列出 Python 3000 上全部的 BDFL 決斷,涉及那些不會發生更改的內容,以及不會引入的新功能,按主題排序,附加簡短的說明或者 python-3000 郵件列表的相關線索。app

若是你認爲應該實現下面所列舉的提議,那你最好當即離開計算機,出門去,盡情娛樂。去戶外活動,在草地上打盹,都比提出一個「毆打一匹死馬」的想法來得有建設性。這算是對你的警告(譯註:下面的主意是不會實現的,不要試圖改變這些已是板上釘釘的決斷)。ide

語言核心

  • 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 不會被更名。
曾經有過提議,在 Python 3000 中移除 lambda。然而,沒人可以提出更好的提供匿名函數的方法。因此 lambda 保留了下來。

但只是說要保持原樣。(有人提議)增長它對語句的支持,但這不是一個好想法。由於它須要容許多行 lambda 表達式,這意味着多行表達式可能忽然出現,例如,將會容許對函數調用使用多行參數。那真是醜陋。字體

郵件:「genexp 語法/lambda」,https://mail.python.org/pipermail/python-3000/2006-April/001042.htmlui

  • Python 不會添加可編程的語法。
郵件:「是一個聲明!是一個函數!二者皆是!」
https://mail.python.org/pipermail/python-3000/2006-April/000286.html
  • 不會有相似 zip() 的並行迭代語法。
郵件:「並行迭代語法」, https://mail.python.org/pipermail/python-3000/2006-March/000210.html
  • 字符串將保持可迭代。
郵件:「使字符串不可迭代」, https://mail.python.org/pipermail/python-3000/2006-April/000759.html
  • 不會有對生成器表達式或列表推導式的結果進行排序的語法。sorted() 將涵蓋全部的使用狀況。
郵件:「爲生成器表達式添加排序」, https://mail.python.org/pipermail/python-3000/2006-April/001295.html
  • 切片和擴展型切片不會取消(即便__getslice__和__setslice__ API 可能被替換),它們也不會返回標準對象類型的視圖。
郵件:切片的將來 https://mail.python.org/pipermail/python-3000/2006-May/001563.html
  • 不會禁止在循環結構內重用循環變量。
郵件:消除迭代變量的做用域出血(scope bleeding) 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, ...)將保留。
郵件:「去除容器字面量」, https://mail.python.org/pipermail/python-3000/2006-July/002550.html
  • 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.html
  • hash() 不會成爲屬性,由於屬性應該是易於計算的,但哈希並不必定是這種狀況。
郵件:「哈希做爲屬性/特性」, https://mail.python.org/pipermail/python-3000/2006-April/000362.html

標準類型

  • 遍歷字典將繼續返回 key。
郵件:「遍歷字典」, 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 類型。
郵件:「不可變的列表」, https://mail.python.org/pipermail/python-3000/2006-May/002219.html
  • int 不會支持下標來生成 range。
郵件:「 xrange vs.int .__ getslice__」, https://mail.python.org/pipermail/python-3000/2006-June/002450.html

編碼風格

  • 對於 C 和 Python 代碼,(推薦的)最大行寬將保持 80 個字符。
郵件:「 C 風格指南」, https://mail.python.org/pipermail/python-3000/2006-March/000131.html

交互式解釋器

  • 解釋器提示(>>>)不會改變。它給 Guido 帶來溫暖的模糊感受。
郵件:「低垂的果實:更改解釋器的提示?」, https://mail.python.org/pipermail/python-3000/2006-November/004891.html

版權

本文檔已放置在公共領域。源文檔:
https://github.com/python/peps/blob/master/pep-3099.txt

譯者注

文中出現的「郵件」,原文是「thread」,英文解釋應該是:a series of connected messages on a message board on the Internet which have been sent by different people。實際指的是「郵件列表中的議題」,爲簡潔起見,省譯爲「郵件」。

公衆號【Python貓】, 本號連載優質的系列文章,有喵星哲學貓系列、Python進階系列、好書推薦系列、技術寫做、優質英文推薦與翻譯等等,歡迎關注哦。

相關文章
相關標籤/搜索