Python运算符优先级 - 和vs大于

Ren*_*der 6 python operator-precedence

我的脚本中有一行代码,它们将这两个操作符链接在一起.从文档引用BOOLEAN AND的优先级低于COMPARISON GREATER THAN.我在这段代码中得到了意想不到的结果:

>>> def test(msg, value):
...     print(msg)
...     return value

>>> test("First", 10) and test("Second", 15) > test("Third", 5)
First
Second
Third
True
Run Code Online (Sandbox Code Playgroud)

我期待第二次或第三次测试在第一次测试之前发生,因为>操作员具有更高的优先级.我在这做错了什么?

https://docs.python.org/3/reference/expressions.html#operator-precedence

Ana*_*mar 7

因为你看错了.call(或函数调用)对两者and以及>(大于)都取得更高的优先级.因此,第一个函数调用从左到右进行.

在比较发生之前,Python将获得所有函数调用的结果.唯一优先考虑的是短路,所以如果test("First",10)返回False,它会短路并返回False.

比较并且and仍然以相同的优先级出现,即首先将结果进行test("Second", 15)比较test("Third", 5)(请注意仅返回值(之前已经发生的函数调用)).然后test("Second", 15) > test("Third", 5)and操作中使用结果.

运营商优先权的文档-

在此输入图像描述