gpt4 book ai didi

python - 测试 boolean 值等价性时的评估顺序

转载 作者:太空狗 更新时间:2023-10-30 01:02:07 25 4
gpt4 key购买 nike

我刚遇到以下情况,对 Python 的行为很好奇:

>>> x = 1
>>> x in range(2)
True
>>> type(x in range(2))
<type 'bool'>
>>> x in range(2) == True
False
>>> x in range(2) == False
False
>>> (x in range(2)) == True
True

特别是,为什么 (1 in range(2)) == True 评估 Truel in range(2) == True 评估为 False?在后者中似乎有一些奇怪的评估行为顺序,除了如果你的顺序明确错误,你会得到一个 TypeError:

>>> x in (range(2) == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable

郑重声明,我不知道在任何情况下我会使用 x in range(2) == True 而不仅仅是 x in range (2) ,但只想知道为什么会这样。我还在 Python2.7 和 Python3 中测试了这个,行为是一样的。

最佳答案

下面的表达式:

x in range(2) == True

是链式比较,被评估为:

x in range(2) and range(2) == True

这会给你 False作为range(2) == True被评估为 False .请参阅 Comparison 的文档:

Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).

关于python - 测试 boolean 值等价性时的评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19524844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com