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

时间:2018-04-02 13:24:54

标签: python python-2.x

我想我只是目睹了一些非常可怕的东西,而且很难消化!

所以在我的项目中,我遇到了这段美丽的代码

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吗?我认为它更难以证明?

2 个答案:

答案 0 :(得分:9)

在Python 2中,TrueFalse内置了#34;常量"。你说它不安全是对的。但是Python实际上并没有常量,所以为了不能分配不同的值,它们需要是关键字。 TrueFalse是Python 3中的关键字。但是将这些新关键字添加到Python 2中可能具有破坏性。

答案 1 :(得分:1)

BoarGules答案大多是正确但不完整的。内置的bool类型和内置的FalseTrue是在2.2.z版本之一中添加的。 (这是在维护版本中没有新功能之前的规则。实际上,中间版本添加产生的混淆是规则的原因之一。)

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

False, True = 0, 1

制作FalseTrue不可编辑的关键字会破坏现有代码。这确实是令人厌恶的。添加后,人们可以选择编辑他们的代码

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

按顺序运行较新的2.x版本时,要FalseTrue为bool,并打印为' False'并且' True'而是打印为0和1。

在3.0中,当大多数人放弃对2.2及之前的支持,因此不再需要作业替代时,FalseTrue被设为关键字。