编程语言
首页 > 编程语言> > python – 测试布尔等价性时的评估顺序

python – 测试布尔等价性时的评估顺序

作者:互联网

我刚刚遇到以下内容并对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

特别是,为什么(范围(2)中的1)== True评估True和l 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

为了记录,我不知道在范围(2)== True而不是x在范围(2)中使用x的任何情况,但是只想知道为什么会发生这种情况.我也在Python2.7和Python3中测试了它,行为是一样的.

解决方法:

以下表达式:

x in range(2) == True

是链式比较,并评估为:

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

这将给你False作为范围(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,order-of-evaluation
来源: https://codeday.me/bug/20190517/1121200.html