与Python中布尔值的比较

2024-04-25 17:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经看到,在Python中,与布尔值的比较应该是if x:,而不是{},而且肯定不是{}的形式。在

>>> 
>>> id(True)
505509720
>>> a = True
>>> id(a)
505509720
>>> random_string_to_reference_a_different_area_of_memory = "Python"
>>> id(True)
505509720
>>>

玩弄变量并查看内存位置(见上文),在我看来只有一个True和一个False对象,那么为什么我们不应该做if x is True:(或者这样做真的很好吗)?在

另外,除了== True是不必要的之外,还有什么理由不应该做if x == True;如果是的话,你能给我一个关于内存的描述吗?在

我个人觉得使用is比使用==更合适,因为当我们进行比较时,我们看起来实际上是在看一个变量是指向True还是{}对象。谁能给我解释一下什么是最好的,为什么,以及它是如何工作的?在


Tags: ofto对象内存idtruestringif
2条回答

你不做x is <True/False>x == <True/False>的一个原因是你并不总是在测试True或{}。采用以下代码:

user_input = raw_input(' > ')
if user_input:
    ...

如果你做user_input is True或{},这两种方法都不会正确计算真值y。还有很多其他例子,其中{a1}应该和{}和{}本身一样可接受,例如

^{pr2}$

可读性较差。在

您也不应该使用== True== False,除非您明确地需要针对布尔值进行测试(您几乎从来不会不这样做)。在Python中执行布尔测试的首选方法是if foo和{}。在

然而,从技术的角度来看,使用is True和{}没有什么错。在PEP 285(它定义了bool类型):

The values False and True will be singletons, like None. Because the type has two values, perhaps these should be called "doubletons"? The real implementation will not allow other instances of bool to be created.

因此,无论何时使用TrueFalse,都会得到相同的实例。在

相关问题 更多 >