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
因为你看错了.call(或函数调用)对两者and以及>(大于)都取得更高的优先级.因此,第一个函数调用从左到右进行.
在比较发生之前,Python将获得所有函数调用的结果.唯一优先考虑的是短路,所以如果test("First",10)返回False,它会短路并返回False.
比较并且and仍然以相同的优先级出现,即首先将结果进行test("Second", 15)比较test("Third", 5)(请注意仅返回值(之前已经发生的函数调用)).然后test("Second", 15) > test("Third", 5)在and操作中使用结果.
从运营商优先权的文档-
