python中的真和错误可以分别重新分配为错误和真实



我想我只是见证了一些真的很恐怖,很难消化!

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

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是"常数"。您对它不安全是正确的。但是Python实际上并没有常数,因此为了使分配不同的值不可能是关键字。TrueFalse是Python 3中的关键字。但是将这些新关键字添加到Python 2。

boargules答案主要是正确但不完整的。内置的布尔类型和内置的FalseTrue是2.2.z版本之一。(这是在"维护版本中没有新功能"规则之前。的确,中期加法引起的混乱是该规则的原因之一。(

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

False, True = 0, 1

制作FalseTrue不正确的关键字将破坏现有代码。那确实会分散。添加后,人们可以选择将其代码编辑为

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

按顺序使用较新的2.x版本运行时,将FalseTrue为bool,并以'false'和'true'打印,而是ints打印为0和1。

在3.0中,当大多数人在2.2及以前的支持下撤销支持时,因此不再需要分配替代方案,FalseTrue被制作了关键字。

最新更新