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 可能会被替换),它们也不会为标准对象类型返回视图。
- 在循环的代码块内部重用循环变量将不被禁止。
- 解析器不会比 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,“显式词法作用域(PEP 之前?)”, https://mail.python.org/pipermail/python-dev/2006-July/067111.html - 不会有替代的绑定运算符,例如
:=
。主题:“显式词法作用域(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()
不会成为属性,因为属性应该计算起来很便宜,而哈希值不一定如此。
标准类型
- 迭代字典将继续产生键。主题:“迭代字典”, 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 与 int.__getslice__”, https://mail.python.org/pipermail/python-3000/2006-June/002450.html
编码风格
- C 和 Python 代码的(推荐)最大行宽将保持 80 个字符。
交互式解释器
- 解释器提示符 (
>>>
) 不会更改。它让 Guido 感到温暖和模糊。主题:“唾手可得的成果:更改解释器提示符?”, https://mail.python.org/pipermail/python-3000/2006-November/004891.html
版权
本文档已进入公有领域。
来源:https://github.com/python/peps/blob/main/peps/pep-3099.rst