我刚刚在 Python 3 中发现了以下代码行。
1 in range(2) == True
我原以为这个表达式会是True,因为1在range(2)中是True,而True等于True也是True。但实际输出的是False。因此它的意思和(1 in range(2)) == True并不相同。此外,它的意思也和1 in (range(2) == True)不相同,后者会引发错误。
尽管我有多年的Python经验,但仍然感到困惑。到底发生了什么?
我刚刚在 Python 3 中发现了以下代码行。
1 in range(2) == True
这是由于两个运算符都是比较运算符,因此被解释为运算符链接:
https://docs.python.org/3.6/reference/expressions.html#comparisons
比较可以任意链接,例如,
x < y <= z
相当于x < y and y <= z
,只是y
只被评估一次(但在两种情况下,当找到x < y
为 false 时,z
都不会被评估)。
所以等同于:
>>> (1 in range(2)) and (range(2) == True)
False
in
,如果是这种情况,那么它将会是一个语法错误(argument of type 'bool' is not iterable
)。 - Holloway(1 in range(2)) and (range(2) == True)
,其中第二部分为假,因此整个条件为假。 - pokein
是一个比较操作符有点反直觉。但我不得不查看实际文档以确认这一怀疑。 - juanpa.arrivillaga