有没有理由在Python 2中仍然可以修改True和False?

4 python constants python-2.7 python-3.x

内置常量,True并且至少在3.3中在Python 3中False不可修改的:

bool类型的错误值.作业False是非法的并且提出了SyntaxError.

bool类型的真正价值.作业True是非法的并且提出了SyntaxError.

但是,在python 2.7中,代码True = 0执行时没有任何异常.似乎这些限制很久以前应该被移植到2.x,但它们没有.

我能想到的唯一原因是与现有代码库的兼容性.您是否知道现有软件故意修改TrueFalse?如果没有,还有什么其他原因?

Jim*_*ard 6

正如Guido在故事情节中所述None,True并且False,在不首先制作TrueFalse关键字的情况下,情境也很重要.当引入bool时(在Python 2.3中使用PEP 285),它无法成为关键字,因为现有的许多代码已经以某种方式定义它:

True/ 的情况False有点不同.他们并不总是语言的一部分,许多人发明了他们自己的惯例.人们会定义名为true和false,True和False,或TRUE和FALSE的常量,并在整个代码中使用这些常量.我不记得哪种拼写最受欢迎,但是当我们将True和False引入语言时,我们绝对不想破坏任何定义自己TrueFalse常量的包.

并继续在后面的段落中说明:

所以,在这种情况下,基本上我们的手被迫,我们必须引入TrueFalse作为内置常量,而不是关键字.但随着时间的推移,定义自己版本的代码TrueFalse(通过任何名称)的代码变得越来越不受欢迎,当Python 3出现时,当我们查看清理语言的机会时,我们发现它是合乎逻辑的制作TrueFalse关键词,类比None.

你正确地假设:

我能想到的唯一原因是与现有代码库的兼容性.

事实上,情况确实如此.在Python 2版本之间保持向后兼容性的需要是为什么TrueFalse不是那里的关键字.

Python 3的不同之处在于,为了清理语言而引入了许多向后不兼容的更改,尴尬的重新分配True并且False不再能够完成,谢天谢地.