我已经看到它说,在Python中,与布尔值的比较应该是if x:
形式,而不是if x == True:
,当然也不是if x is True:
形式。
>>>
>>> id(True)
505509720
>>> a = True
>>> id(a)
505509720
>>> random_string_to_reference_a_different_area_of_memory = "Python"
>>> id(True)
505509720
>>>
使用变量并查看内存位置(见上文),我认为只有一个True
和一个False
对象,所以为什么我们不应该这样做{ {1}}(或者这样做真的很好)?
另外,除了if x is True:
是不必要的这一事实之外,我们有什么理由不做if x == True
;如果是的话,你能给我一个关于记忆的描述吗?
我个人认为使用== True
比使用is
更合适,因为当我们进行比较时,看起来我们实际上在查看变量是否指向==
或True
对象。谁能给我一个解释什么是最好的,为什么,以及它是如何工作的?
答案 0 :(得分:4)
您也不应该使用== True
或== False
,除非明确需要针对布尔值进行测试(您几乎不会对其进行测试)。 T)。在Python中执行布尔测试的首选方法是if foo
和if not foo
。
但是,从技术角度来看,使用is True
和is False
并没有错。在PEP 285(定义了bool类型):
值False和True将是单例,如None。因为 该类型有两个值,也许应该调用它们 " doubletons&#34 ;?真正的实施将不允许其他 要创建bool的实例。
因此,无论何时使用True
或False
,您最终都会使用相同的实例。
答案 1 :(得分:2)
您不执行x is <True/False>
或x == <True/False>
的一个原因是并非总是在测试True
或False
。请使用以下代码:
user_input = raw_input(' > ')
if user_input:
...
如果你执行user_input is True
或user_input == True
,这将无法正常工作,这两项都不会评估真相y。还有很多其他例子truth-y and false-y objects应该像True
和False
本身一样可以接受,例如。
if bool(user_input) is True:
的可读性相当低。