ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-05-17 12:44:03  阅读:285  来源: 互联网

标签:python boolean order-of-evaluation


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有