我想我只是见证了一些真的很恐怖,很难消化!
所以在我的项目中,我遇到了这个美丽的代码
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, True
和 False
是"常数"。您对它不安全是正确的。但是Python实际上并没有常数,因此为了使分配不同的值不可能是关键字。True
和False
是Python 3中的关键字。但是将这些新关键字添加到Python 2。
boargules答案主要是正确但不完整的。内置的布尔类型和内置的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'打印,而是ints打印为0和1。
在3.0中,当大多数人在2.2及以前的支持下撤销支持时,因此不再需要分配替代方案,False
和True
被制作了关键字。