对象/布尔等价如何在python中工作?

Lui*_*ira -3 python

来自javascript,我发现这个行为很奇怪:

>>> empty_list = []
>>> empty_list == True
False
>>> empty_list is True
False
>>> empty_list is False
False
>>> empty_list == False
False
Run Code Online (Sandbox Code Playgroud)

而另一方面:

>>> one_list = [1]
>>> one_list is False
False
>>> one_list is True
False
>>> one_list == False
False
>>> one_list == True
False
Run Code Online (Sandbox Code Playgroud)

实际上,我预计到了:

if []:
  pass # This never done
Run Code Online (Sandbox Code Playgroud)

if [4]:
  pass # This is always done
Run Code Online (Sandbox Code Playgroud)

>>> not []
True
>>> not [1]
False
Run Code Online (Sandbox Code Playgroud)

列表将转换为布尔值.

我知道

>>> bool([])
False
>>> bool([1])
True
Run Code Online (Sandbox Code Playgroud)

所以我想知道为什么notif进行这种转换,而不是in也不==

这有什么正式的解释吗?

Lær*_*rne 8

is是一个检查对象相等性的运算符.换句话说,a is b是真,当且仅当ab是指向内存中的同一个对象的两个名字.

如果您只是想要普通的平等或不平等,请使用==!=.但请注意,布尔值永远不会等于列表,因为它们只是不同的类型.Python中没有像在Javascript中那样进行隐式转换.在比较之前,您仍需要在Boolean中显式转换列表.