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

d-c*_*der 7 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!
Run Code Online (Sandbox Code Playgroud)

但后来它提出了一个问题,当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. 
Run Code Online (Sandbox Code Playgroud)

这种行为是否正常?这是应该实施的方式吗?为什么不让它不可编辑?使用python时这是一个安全风险还是与其他语言一样?任何聪明的方式使它更像不可编辑,就像我需要覆盖的任何内置?我今晚怎么睡着了?

我正在使用python 2.6.6.

编辑1:那么我们可以使用0和1代替False和True吗?我认为这更难以证明了吗?

Boa*_*les 9

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

  • "你说这不安全是对的." 从安全的角度来看?也许我正在遭受想象力的失败,但你能详细说明吗?请记住,任何以"首先,攻击者获得对源代码的写入权限"开头的攻击策略都将生效,无论True和False是否可写. (3认同)
  • 谁说过攻击者?这是不安全的,因为它可能会意外更改您知道(或者在这种情况下,相信您知道)是常量的值。考虑传递给函数的布尔值列表,然后错误地为该列表的元素赋值(因为参数顺序错误)。等等。 (2认同)