为何bool(None and None is None)结果为False?逻辑疑问求助
问题原因解析
这是Python运算符优先级导致的结果,核心点在于is的优先级比and更高,所以你写的表达式None and None is None并不会按照你预想的(None and None) is None来执行,而是被Python解析为:
None and (None is None)
具体计算过程:
- 第一步先执行优先级更高的
None is None,结果为True - 第二步执行
None and True,Python的and运算符是短路求值:如果第一个操作数在布尔上下文中为假(None属于假值),就直接返回第一个操作数,不会再计算第二个操作数,所以最终返回None - 而
bool(None)的结果本身就是False,这和你调试看到的结果完全吻合
验证你原本的逻辑
如果你想实现「先计算None and None,再判断结果是否为None」的逻辑,需要手动加上括号明确执行顺序:
(None and None) is None # 结果为True bool((None and None) is None) # 结果为True
内容的提问来源于stack exchange,提问作者37dev
相关产品推荐
相关产品推荐

