首页 > 解决方案 > 函数调用运算符优先级

问题描述

根据这个站点函数调用优先于属性访问,这让我感到困惑。

>>> class cls:
    def func(self):
        print("Method")


>>> def func():
    print("Global Func")


>>> obj=cls() 
>>> obj.func() #1
Method
>>> (obj.func)() #2
Method
>>> obj.(func()) #3
SyntaxError: invalid syntax

3 是预期的语法错误,但如果函数调用优先于属性访问,为什么 1 和 2 会产生相同的结果?

标签: pythonfunctionparsingexpression

解决方案


根据链接到的官方 Python 文档,该网站略有错误:https ://docs.python.org/3/reference/expressions.html#operator-precedence

您会注意到 Python 文档中列出的运算符优先级在表中倒数第二个插槽中都位于同一行:x[index], x[index:index], x(arguments...), x.attribute。正如文档所述,

同一框中的运算符具有相同的优先级。...同一框中的运算符从左到右分组(取幂除外,它从右到左分组)。

您链接到的网站声明相同,只是将这四件事按顺序排列,而不是放在同一个框中,无论出于何种原因。


推荐阅读