Python 为什么(非None)=True的计算结果为True?
这让我最近在一段Python代码中大吃一惊——我正在检查列表中的任何值是否为False,因此我使用了如下方法:Python 为什么(非None)=True的计算结果为True?,python,python-2.7,Python,Python 2.7,这让我最近在一段Python代码中大吃一惊——我正在检查列表中的任何值是否为False,因此我使用了如下方法: if any(not v for v in values): # Do something... 但是,我忘了列表中有None值,所以我一直得到令人困惑的输出,直到我记得先检查它。这让我想知道,(而不是None)=True背后的基本原理是什么None==False的计算结果为False,因此它不是自反的,我也不清楚None对象的逻辑否定为什么应该计算为True为什么会发生这种
if any(not v for v in values):
# Do something...
但是,我忘了列表中有
None
值,所以我一直得到令人困惑的输出,直到我记得先检查它。这让我想知道,(而不是None)=True
背后的基本原理是什么None==False
的计算结果为False
,因此它不是自反的,我也不清楚None
对象的逻辑否定为什么应该计算为True
为什么会发生这种情况的解释在对您的问题的注释中。检查列表中的任何内容是否计算为false的一个好方法是:
if not all(values):
有很多方法可以做你正在做的事情,但对我来说,这比你对列表的理解更具可读性。关于为什么会发生这种情况的解释是在对你的问题的评论中。检查列表中的任何内容是否计算为false的一个好方法是:
if not all(values):
有很多方法可以做你正在做的事情,但对我来说,这比你对列表的理解更具可读性。这个相关问题的答案包含了一些你可能想查看的好信息,解释了Python中使用
True
、False
和None
的细节:
在比尔·卢巴诺维奇(Bill Lubanovic)的《介绍Python》一书中可以找到一个更具体的解释,该书提到了使用“真实性”和“错误性”概念检查空数据结构以及False
条件的Python程序。作者甚至在第88页上有一个标题为“无有用”的小节,其中详细阐述了:
None
是一个特殊的Python值,它在没有什么可说的情况下占据一席之地。
它与布尔值False
不同,尽管当作为布尔值计算时,它看起来是False。
[...]
您需要None
来区分缺少的值和空值。。。零值整数或浮点数、空字符串(“”)、列表([])、元组(,)、字典({})和集合(集合())都是False
,但不等于None
这就是为什么None
的行为方式与True
和False
或1
或0
不同的基本原理
至于你问题的另一部分,它似乎是一个逻辑重言:
None
是False
,因为基于上述原因,Python将None
解释为与null
等价。通过将not
添加到None
中,可以反转其布尔值,从而将其转换为True
对相关问题的回答包含一些您可能想查看的好信息,解释了Python中使用True
、False
和None
的详细信息:
在比尔·卢巴诺维奇(Bill Lubanovic)的《介绍Python》一书中可以找到一个更具体的解释,该书提到了使用“真实性”和“错误性”概念检查空数据结构以及False
条件的Python程序。作者甚至在第88页上有一个标题为“无有用”的小节,其中详细阐述了:
None
是一个特殊的Python值,它在没有什么可说的情况下占据一席之地。
它与布尔值False
不同,尽管当作为布尔值计算时,它看起来是False。
[...]
您需要None
来区分缺少的值和空值。。。零值整数或浮点数、空字符串(“”)、列表([])、元组(,)、字典({})和集合(集合())都是False
,但不等于None
这就是为什么None
的行为方式与True
和False
或1
或0
不同的基本原理
至于你问题的另一部分,它似乎是一个逻辑重言:
None
是False
,因为基于上述原因,Python将None
解释为与null
等价。通过将not
添加到None
中,可以反转其布尔值,从而将其转换为True
not
是一个生成布尔值的运算符,布尔值是其操作数的倒数
我怀疑你把真值和布尔值混淆了。后者仅为True
或False
,但任何Python对象的真值都可以通过将其传递给bool()
函数转换为布尔值。语句如if
和while
,运算符如和,或和not
测试真值,特别是布尔值any()
和all()
测试iterable中的每个值是否为真值
因此,在测试真值时,如果某个表达式==True
或如果不是某个表达式==True
,则不需要执行。如果某个表达式
或不是某个表达式
,只需使用
请注意,not
必须返回布尔值,因为通常不能反转真值。例如,0
或空列表的反比是什么0
被视为false,但任何其他整数都将被视为true,因此如果不是false
,那么不是0
将返回什么值?对于列表,您会在列表中放入什么来生成not[]
?not
是一个生成布尔值的运算符,布尔值是其操作数的倒数
我怀疑你是糊涂了