python中的True和False可以分别重新赋值给False和True吗?

True and False in python can be reassigned to False and True respectively?

我想我刚刚目睹了一些非常可怕和难以消化的事情!

所以在我的项目中我遇到了这段漂亮的代码

from CoreDefaults import FALSE, TRUE

查看 CoreDefaults 模块后,我看到了这个

TRUE = 1 == 1     # some part of my mind was blown here
FALSE = 0 == 1    # which I honestly thought was clever and it really is!

但随后提出了一个问题,当 python 给出默认的 True 和 False 时,为什么有人会评估 True 和 False 的值,然后分配给这些变量,但后来我有一种预感,唯一的原因是任何人如果可以重新分配这些值,我会做的!

所以我尝试了以下

>>> True
True
>>> False
False
>>> True = False   # True is assigned to False and it is NOT OK ?
>>> True
False              # Python, I think it's over between you and me. 

这种行为正常吗?这是应该实施的方式吗?为什么不让它不可编辑?使用 python 时是否存在安全风险,或者其他语言是否也存在安全风险?有什么聪明的方法可以让它像我需要覆盖的任何内置函数一样更不可编辑吗?我今晚要怎么入睡?

我正在使用 python 2.6.6.

编辑 1: 那么我们可以用 0 和 1 代替 False 和 True 吗?我认为它更能防止失败?

在Python 2 中,TrueFalse 是内置的"constants"。你说的不安全是对的。但是 Python 实际上并没有常量,因此要使其无法分配不同的值,它们需要是关键字。 TrueFalse 是 Python 3 中的关键字。但是将这些新关键字添加到 Python 中会造成破坏 2.

BoarGules 的回答大部分正确但不完整。 built-in 布尔类型和 built-in FalseTrue 被添加到 2.2.z 版本之一。 (这是在 'no new features in maintenance releases' 规则之前。事实上,添加 mid-version 引起的混淆是该规则的原因之一。)

在此添加之前,想要使用 FalseTrue 的人必须在代码顶部附近编写如下内容。

False, True = 0, 1

使 FalseTrue 关键字不可编辑会破坏现有代码。那确实会造成破坏。添加后,人们可以选择将他们的代码编辑为

try:
    False
except NameError:
    False, True = 0, 1

顺序,当 运行 较新的 2.x 发布时,FalseTrue 是布尔值,并打印为 'False' 和 'True' 而不是将整数打印为 0 和 1。

在 3.0 中,当大多数人不再支持 2.2 及之前的版本,因此不再需要赋值选项时,FalseTrue 成为关键字。