我正在尝试猜测哪个运算符具有优先级:>
(大于)还是 ==
(等于)。这是我的实验:
>>> 5 > 4 == 1
False
据我所知,这有两种可能的解决方案。>>> (5 > 4) == 1
True
>>> 5 > (4 == 1)
True
两者都没有返回False
,那么Python是如何解决第一个代码的呢?
我正在尝试猜测哪个运算符具有优先级:>
(大于)还是 ==
(等于)。这是我的实验:
>>> 5 > 4 == 1
False
据我所知,这有两种可能的解决方案。>>> (5 > 4) == 1
True
>>> 5 > (4 == 1)
True
两者都没有返回False
,那么Python是如何解决第一个代码的呢?
这与操作符链有关。与C/C++和大多数其他语言不同,Python允许您像正常数学运算一样链接比较运算符。来自文档:
比较可以任意链接,例如,
x < y <= z
等价于x < y and y <= z
,只是在第一种情况下y
只被评估一次(但在两种情况下都不会在x < y
被发现为假时评估z
)。
因此,这个表达式:
5 > 4 == 1
实际上被解释为:
5 > 4 and 4 == 1 # Except that 4 is only evaluated once.
这将变成:
True and False
这是False
。
(5 > 4) == 1
变成:
True == 1
这是因为它是True
(请参见下文)。同样适用于:
5 > (4 == 1)
转换为:
5 > False
这也是真的
。
bool
被作为int
的子类,并且True == 1
,而False == 0
:>>> issubclass(bool, int)
True
>>> True == 1
True
>>> False == 0
True
>>>
typedef enum { false, true } bool;
的事情来实现相同的结果)。不过我会改变措辞,因为这只是一种包含PEP链接的方式。 :) - user2555451