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,“显式词法作用域 (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