来自javascript,我发现这个行为很奇怪:
>>> empty_list = []
>>> empty_list == True
False
>>> empty_list is True
False
>>> empty_list is False
False
>>> empty_list == False
False
而另一方面:
>>> one_list = [1] >>> one_list is False False >>> one_list is True False >>> one_list == False False >>> one_list == True False
实际上,我预计到了:
if []: pass # This never done
和
if [4]: pass # This is always done
和
>>> not [] True >>> not [1] False
列表将转换为布尔值.
我知道
>>> bool([]) False >>> bool([1]) True
所以我想知道为什么not
并if
进行这种转换,而不是in
也不==
做
这有什么正式的解释吗?
is
是一个检查对象相等性的运算符.换句话说,a is b
是真,当且仅当a
和b
是指向内存中的同一个对象的两个名字.
如果您只是想要普通的平等或不平等,请使用==
或!=
.但请注意,布尔值永远不会等于列表,因为它们只是不同的类型.Python中没有像在Javascript中那样进行隐式转换.在比较之前,您仍需要在Boolean中显式转换列表.