这最近在一段Python代码中绊倒了我 - 我正在检查列表中的任何值是否为False,所以我使用了类似的东西:
None
但是,我忘记了列表中有(not None) == True
个值,所以在我记得第一次检查之前,我一直在混淆输出。这让我感到疑惑 - None == False
背后的理由是什么? False
评估为None
,因此它不是自反性的,并且我不能立即清楚为什么True
对象的逻辑否定应该评估为 $(document).ready(function(){
var fullpath =window.location.pathname;
var filename=fullpath.replace(/^.*[\\\/]/, '');
//alert(filename);
var currentLink=$('a[href="' + filename + '"]'); //Selects the proper a tag
currentLink.parent().addClass("active");
}))
。
答案 0 :(得分:3)
not
是一个生成布尔值的运算符,它是它的操作数truth value的倒数。
我怀疑你将真值与布尔值混淆。后者只是True
或False
,但任何Python对象的真值都可以转换到一个布尔值,方法是将它传递给bool()
函数。像if
和while
这样的语句,and
,or
和not
等运算符会测试真值,而不是特定的布尔值。 any()
和all()
也可以测试迭代中的每个值。
因此,在测试真值时,您永远不需要if some_expression == True
或if not some_expression == True
。只需使用if some_expression
或if not some_expression
。
请注意,not
有返回布尔值,因为您通常无法反转真值。例如,0
或空列表的反转是什么? 0
被视为false,但任何其他整数都会被视为true,那么not 0
如果不是False
会返回什么值?对于列表,您会在列表中放置什么来生成not []
?
答案 1 :(得分:0)
解释原因的原因在于您的问题的评论。检查列表中的任何内容是否为false的好方法是:
if not all(values):
有很多方法可以做你正在做的事情,但这对我来说比你的列表理解更具可读性。
答案 2 :(得分:0)
对相关问题的回答包含一些您可能想要查看的好信息,解释有关在Python中使用True
,False
和None
的详细信息:{{3 }}
可能在你的答案中更具体的解释可以在Bill Lubanovic的O'Reilly一书 Introducing Python 中找到,他提到使用“真实性”和“虚假”概念的Python程序“检查空数据结构以及False
条件。作者甚至在第88页有一个标题为“无用”的小节,其中详细阐述了:
None
是一个特殊的Python值,当没有什么可说时,它就占有一席之地。 它与布尔值False
不同,但在计算为布尔值时它看起来是假的。 [...] 您需要None
来区分缺失值和空值...零值整数或浮点数,空字符串(''),列表([]),元组((,)),字典( {})和sets(set())都是False
,但不等于None
。
这就是为什么 None
行为方式背后的理由,除了True
和False
之外,它还具有微妙的品质或1
或0
。
至于问题的其他部分,它似乎是一个逻辑重言式:None
是False
因为Python将None
解释为等同于null
由于上面找到的原因。通过将not
添加到None
,您将反转其布尔值,将其转换为True
。