Python 语言中看似简单的常量定义,在底层实现上却存在令人费解的差异化设计。文章深入剖析了 Python 的六个预声明常量——True、False、None、__debug__、Ellipsis 和 NotImplemented——揭示了它们在词法分析和作用域处理上的不一致性。研究发现,True、False 和 None 实际上是关键字而非标识符,这使得它们无法通过属性访问(如 x.True 会引发语法错误),且不受 `builtins` 模块修改的影响。相比之下,__debug__ 虽然是标识符,但却是 Python 中唯一被语法层面禁止赋值的变量,其值还会根据运行时的优化标志(-O)动态变化。最奇怪的是 Ellipsis 和 NotImplemented,它们本质上只是普通的内置常量,完全可以被全局变量覆盖,尽管其符号形式 `…` 表现得仍像是一个常量。这种即使在 `setattr(builtins, ‘True’, 67)` 修改后,关键字 True 依然保持原值的“硬编码”行为,展示了 Python 在演进过程中为了保持语言核心稳定性所做的特殊处理,同时也暴露了语言规范中存在的“特例”与不统一性。
事件分析
核心观点:Python 常量的多重实现机制暴露了该语言在演进过程中为了兼容性而做出的不规则妥协,底层逻辑的“不纯粹”正是动态语言灵活性的代价。
原文链接:Hacker News

评论前必须登录!
立即登录 注册