设置运算符优先级

时间:2019-02-17 16:24:15

标签: python python-3.x operators operator-precedence

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

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

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

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

当我应用括号时,它将返回我想要的输出,即{1,3,4}

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

所以,我的问题是为什么会这样?应用设置操作时,什么是运算符(对于像-,|,&,^等设置运算符)优先。

1 个答案:

答案 0 :(得分:1)

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))