Установить приоритет оператора - PullRequest
0 голосов
/ 17 февраля 2019

В 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 голосов
/ 17 февраля 2019

python приоритет оператора правила отдают приоритет оператору -, а затем поразрядному оператору |:

Теперь у нас есть set с union, перегруженным | и difference, oveloaded with -:

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