设置运算符优先级

Set operator precedence

在python中,我无法理解运算符的优先级。

a = set([1, 2, 3])

a|set([4])-set([2])

上面的表达式returns {1,2,3,4}。但是,我认为运营商 |应在之前执行 - 但这似乎并没有发生。

当我应用括号时,它 returns 我得到了所需的输出,即 {1,3,4}

  (a|set([4]))-set([2])

所以,我的问题是为什么会发生这种情况,以及在应用集合运算时运算符(对于集合运算符,如 -、|、&、^ 等)的优先级是什么。

python operator precedence 规则优先考虑 - 运算符,然后是按位 | 运算符:

现在我们有一个 setunion,重载 |,和 difference,重载 -

a = set([1, 2, 3])

a|set([4])-set([2])

现在的问题是:为什么同样的优先规则适用?

这是因为 python 对重载标准运算符的所有 类 应用相同规则优先级的运算符表达式求值:

class Fagiolo:

    def __init__(self, val):
        self.val = val

    def __or__(self, other):
        return Fagiolo("({}+{})".format(self.val, other.val))

    def __sub__(self, other):
        return Fagiolo("({}-{})".format(self.val, other.val))

    def __str__(self):
        return self.val

red = Fagiolo("red")
white = Fagiolo("white")

new_born = red | white - Fagiolo("blue")

print(new_born)

给出:

(red+(white-blue))