这个表达式是如何求值的? "f" 在 "foo" == 真
How is this expression evaluated? "f" in "foo" == True
>>> "f" in "foo"
True
>>> "f" in "foo" == True
False
我很困惑为什么第二个表达式是 False。我看到 ==
的优先级高于 in
。但是我希望得到一个异常,这就是我添加括号时发生的情况:
>>> "f" in ("foo" == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable
似乎只有当 foo
在 ==
的两边时表达式才为真,像这样:
>>> "f" in "foo" == "foo"
True
>>> "f" in "foo" == "bar"
False
我错过了什么? Python 这里实际计算的是什么?
在Python中,比较运算符链。
这就是为什么 1 < 2 < 3 < 4
工作并评估为 True。
见https://docs.python.org/3/reference/expressions.html#comparisons
in
和==
就是这样的操作符,所以通过这个机制
"f" in "foo" == True
表示
("f" in "foo") and ("foo" == True)
>>> "f" in "foo"
True
>>> "f" in "foo" == True
False
我很困惑为什么第二个表达式是 False。我看到 ==
的优先级高于 in
。但是我希望得到一个异常,这就是我添加括号时发生的情况:
>>> "f" in ("foo" == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable
似乎只有当 foo
在 ==
的两边时表达式才为真,像这样:
>>> "f" in "foo" == "foo"
True
>>> "f" in "foo" == "bar"
False
我错过了什么? Python 这里实际计算的是什么?
在Python中,比较运算符链。
这就是为什么 1 < 2 < 3 < 4
工作并评估为 True。
见https://docs.python.org/3/reference/expressions.html#comparisons
in
和==
就是这样的操作符,所以通过这个机制
"f" in "foo" == True
表示
("f" in "foo") and ("foo" == True)