设置运算符优先级
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 规则优先考虑 -
运算符,然后是按位 |
运算符:
现在我们有一个 set
和 union
,重载 |
,和 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))
在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 规则优先考虑 -
运算符,然后是按位 |
运算符:
现在我们有一个 set
和 union
,重载 |
,和 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))