Перевага та асоціативність операторів у Python

У цьому підручнику ви дізнаєтеся, як перевага та асоціативність операторів впливають на порядок операцій у Python.

Перевага операторів Python

Поєднання значень, змінних, операторів та викликів функцій називається виразом. Інтерпретатор Python може обчислити дійсний вираз.

Наприклад:

 >>> 5 - 7 -2

Ось 5 - 7вираз. У виразі може бути більше одного оператора.

Для оцінки цих типів виразів існує правило переваги в Python. Він визначає порядок здійснення цих операцій.

Наприклад, множення має вищий пріоритет, ніж віднімання.

 # Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2

Але ми можемо змінити цей порядок за допомогою дужок, ()оскільки він має вищий пріоритет, ніж множення.

 # Parentheses () has higher precedence >>> (10 - 4) * 2 12

Пріоритет оператора в Python наведено в наступній таблиці. Це в порядку спадання (верхня група має вищий пріоритет, ніж нижча).

Оператори Значення
() Круглі дужки
** Експонента
+x, -x,~x Одинарний плюс, Одинарний мінус, Побітове НЕ
*, /, //,% Множення, Ділення, Ділення підлоги, Модуль
+, - Додавання, віднімання
<<, >> Побітові оператори зсуву
& Побітове І
^ Побітовий XOR
| Побітове АБО
==, !=, >, >=, <, <=, is, is not, in,not in Порівняння, ідентичність, членство операторів
not Логічне НЕ
and Логічне І
or Логічне АБО

Давайте розглянемо кілька прикладів:

Припустимо, ми будуємо if… elseблок, який працює, ifколи обід - це фрукти або бутерброд, і лише якщо грошей більше або дорівнює 2.

 # Precedence of or & and meal = "fruit" money = 0 if meal == "fruit" or meal == "sandwich" and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Вихідні дані

 Обід доставляється

Ця програма працює ifблочно, навіть коли грошей дорівнює 0. Вона не дає нам бажаного результату, оскільки перевага andвище ніж or.

Ми можемо отримати бажаний результат, використовуючи дужки ()таким чином:

 # Precedence of or & and meal = "fruit" money = 0 if (meal == "fruit" or meal == "sandwich") and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Вихідні дані

 Не можу доставити обід

Асоціативність операторів Python

У наведеній вище таблиці ми бачимо, що в одній групі існує більше одного оператора. Ці оператори мають однаковий пріоритет.

Коли два оператори мають однаковий пріоритет, асоціативність допомагає визначити порядок операцій.

Асоціативність - це порядок, в якому обчислюється вираз, що має кілька операторів з однаковим пріоритетом. Майже всі оператори мають асоціативність зліва направо.

Наприклад, множення та поділ підлоги мають однаковий пріоритет. Отже, якщо обидва вони присутні у виразі, спочатку оцінюється лівий.

 # Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))

Вихідні дані

 3 0

Примітка : Оператор експоненти **має асоціативність справа наліво в Python.

 # Shows the right-left associativity of ** # Output: 512, Since 2**(3**2) = 2**9 print(2 ** 3 ** 2) # If 2 needs to be exponated fisrt, need to use () # Output: 64 print((2 ** 3) ** 2)

Ми бачимо, що 2 ** 3 ** 2це еквівалентно 2 ** (3 ** 2).

Не асоціативні оператори

Деякі оператори, такі як оператори присвоєння та оператори порівняння, не мають асоціативності в Python. Існують окремі правила для послідовностей такого типу операторів, і їх не можна виразити як асоціативність.

Наприклад, x < y < zні засоби, (x < y) < zні x < (y < z). x < y < zеквівалентно x < y and y < zі обчислюється зліва направо.

Більше того, хоча ланцюжок таких завдань, як x = y = z = 1цілком дійсний, x = y = z+= 2призведе до помилки.

 # Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2

Вихідні дані

 Файл "", рядок 8 x = y = z + = 2 SyntaxError: помилковий синтаксис

Цікаві статті...