我无法弄清楚原因:
f = lambda x: x
In [8]: f is True
Out[8]: False
In [9]: not f is True
Out[9]: True
In [10]: f is False
Out[10]: False
In [11]: f is True
Out[11]: False
In [12]: not f
Out[12]: False
In [13]: not f is True
Out[13]: True
In [14]: not f is False
Out[14]: True
Run Code Online (Sandbox Code Playgroud)
好.所以直到现在我们可以想象这是由于使用"是"而不是"==".如下图所示:
In [15]: 0.00000 is 0
Out[15]: False
In [16]: 0.00000 == 0
Out[16]: True
Run Code Online (Sandbox Code Playgroud)
好.但是为什么然后如果我在功能上这样做:
In [17]: not f == False
Out[17]: True
In [18]: not f == True
Out[18]: True
In [19]: f ==True
Out[19]: False
In [20]: f ==False
Out[20]: False
In [21]: f
Out[21]: <function __main__.<lambda>>
Run Code Online (Sandbox Code Playgroud)
我试图解释它是因为"是"而不是"==",但是例子19和20压碎了我的逻辑.谁能解释一下?
is测试对象身份.比较比其他任何True与is True总是将是错误的.
你的下一组的测试,如果测试的not (f == False)或not (f == True); 同样,布尔对象只对自己测试相等,所以除了False比较之外的任何东西都会测试为false == False.not False那是真的.
您想要使用它bool()来测试某些内容是真还是假:
>>> bool(f)
True
>>> bool(0)
False
Run Code Online (Sandbox Code Playgroud)
不要使用相等测试来查看某些内容是真还是假.
请注意,只有数字0,空容器和字符串,并且False在Python中被视为false.默认情况下,其他所有内容在布尔上下文中都被视为true.自定义类型可以实现__nonzero__方法(数字时)或__len__方法(实现容器)来改变该行为.Python 3替换__nonzero__为该__bool__方法.
函数没有__nonzero__或__len__方法,所以它们始终被认为是真的.