我想我只是目睹了一些非常可怕的东西,而且很难消化!
所以在我的项目中,我遇到了这段美丽的代码
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吗?我认为它更难以证明?
答案 0 :(得分:9)
在Python 2中,True
和False
内置了#34;常量"。你说它不安全是对的。但是Python实际上并没有常量,所以为了不能分配不同的值,它们需要是关键字。 True
和False
是Python 3中的关键字。但是将这些新关键字添加到Python 2中可能具有破坏性。
答案 1 :(得分:1)
BoarGules答案大多是正确但不完整的。内置的bool类型和内置的False
和True
是在2.2.z版本之一中添加的。 (这是在维护版本中没有新功能之前的规则。实际上,中间版本添加产生的混淆是规则的原因之一。)
在此添加之前,想要使用False
和True
的用户必须在代码顶部附近写下类似内容。
False, True = 0, 1
制作False
和True
不可编辑的关键字会破坏现有代码。这确实是令人厌恶的。添加后,人们可以选择编辑他们的代码
try:
False
except NameError:
False, True = 0, 1
按顺序运行较新的2.x版本时,要False
和True
为bool,并打印为' False'并且' True'而是打印为0和1。
在3.0中,当大多数人放弃对2.2及之前的支持,因此不再需要作业替代时,False
和True
被设为关键字。