如何解决Python条件下的操作评估顺序
如果我有类似a = [1,2,3]
的内容,并且写了类似1 in a == True
的语句,则该表达式的结果似乎为假。
但是,如果我写(1 in a) == True
,则结果为true。
我对Python如何评估第一个语句最终达到false感到困惑。
解决方法
==
和in
都被视为比较运算符,这意味着operator chaining生效:
比较可以任意链接,例如
x < y <= z
等效于x < y and y <= z
,除了y
仅被评估一次(但在两种情况下,z
都不被评估)全部x < y
被发现为假)。
此链接使您可以编写:
if 0 <= x < 20: # meaning: if x >= 0 and x < 20:
因此,表达式1 in a == True
被链接为1 in a and a == True
,并且由于该and
的右侧为假,因此整个表达式都是假。
当您用括号“隔离”表达式的一部分时,不会发生此链接,这就是(1 in a) == True
发挥预期作用的原因。
已经解释了,将布尔值与True
(或与此相关的False
)进行比较并不是您真正应该做的事情,因为这会导致逻辑上无限的情况,例如:
if (((a == 7) == True) != False) == True # 'a == 7' already a boolean.
最好只使用以下一种:
if expression # if comparing with True
if not expression # if comparing with False
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。