来自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)
所以我想知道为什么not并if进行这种转换,而不是in也不==做
这有什么正式的解释吗?
is是一个检查对象相等性的运算符.换句话说,a is b是真,当且仅当a和b是指向内存中的同一个对象的两个名字.
如果您只是想要普通的平等或不平等,请使用==或!=.但请注意,布尔值永远不会等于列表,因为它们只是不同的类型.Python中没有像在Javascript中那样进行隐式转换.在比较之前,您仍需要在Boolean中显式转换列表.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |