mdm*_*dml 5 python boolean operator-precedence
我刚刚遇到以下内容并对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
Run Code Online (Sandbox Code Playgroud)
特别是,为什么(1 in range(2)) == 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
Run Code Online (Sandbox Code Playgroud)
为了记录,我不知道我会使用什么情况x in range(2) == True而不仅仅是x in range (2),但我想知道为什么会这样.我也在Python2.7和Python3中测试了它,行为是一样的.
下面的表达式:
x in range(2) == True
Run Code Online (Sandbox Code Playgroud)
是链式比较,计算结果为:
x in range(2) and range(2) == True
Run Code Online (Sandbox Code Playgroud)
这将为您提供评估False结果。请参阅文档进行比较:range(2) == TrueFalse
比较可以任意链接,例如
x < y <= z等价于,只不过 y 仅计算一次(但在这两种情况下,当发现 为 falsex < y and y <= z时,根本不计算 z )。x < y
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |