Python 的预声明常量为何如此怪异

Python's pre-declared constants are kinda weird

Python 中有 6 个预声明的“常量”,但它们的底层行为却大相径庭。True、False 和 None 是真正的关键字,连 x.True 这样的写法都会直接触发 SyntaxError;而 __debug__ 虽能作为标识符,却唯独禁止赋值,甚至删除它也会报特殊错误。更奇怪的是,Ellipsis 和 NotImplemented 只是普通内置对象,可以被全局变量覆盖。最讽刺的是,即便你用 setattr 修改了 builtins 模块中 True 或 __debug__ 的值,代码中直接使用这些词时,它们的值依然纹丝不动。这种设计上的不一致,究竟源于什么考量?

给 __debug__ 赋值是我所知的少数几种情况之一:明明语法完全合法,却偏偏抛出了 SyntaxError。

同日更多故事

2026-08-25