Двійкові арифметичні операції

Оновлено: 24.04.2023

Двійкові арифметичні операції мають загальноприйняті рівні пріоритету. Зверніть увагу, що деякі з цих операцій також застосовуються до певних нечислових типів. Окрім оператора степеня, існує лише два рівні: один для мультиплікативних операторів і один для адитивних операторів:

m_expr ::=  u_expr | m_expr "*" u_expr | m_expr "@" m_expr |
            m_expr "//" u_expr | m_expr "/" u_expr |
            m_expr "%" u_expr
a_expr ::=  m_expr | a_expr "+" m_expr | a_expr "-" m_expr

Оператор * (множення) повертає добуток своїх аргументів. Обидва аргументи мають бути числами, або один аргумент має бути цілим числом, а інший — послідовністю. У першому випадку числа перетворюються на загальний тип, а потім перемножуються. В останньому випадку виконується повторення послідовності; негативний коефіцієнт повторення дає порожню послідовність.

Цю операцію можна налаштувати за допомогою спеціальних методів __mul__() і __rmul__().

Оператор @ (at) призначений для використання для множення матриці. Жодні вбудовані типи Python не реалізують цей оператор.

Оператори / (поділ) і // (поділ на поверх) видають приватне своїх аргументів. Числові аргументи спочатку перетворюються на загальний тип. Ділення цілих чисел дає значення з плаваючою точкою, а поділення цілих чисел дає ціле число; результатом є математичне ділення із застосованою до результату функцією «підлога». Ділення на нуль викликає виключення ZeroDivisionError.

Цю операцію можна налаштувати за допомогою спеціальних методів __truediv__() і __floordiv__().

Оператор % (по модулю) дає залишок від ділення першого аргументу на другий. Числові аргументи спочатку перетворюються на загальний тип. Нульовий правий аргумент викликає виняток ZeroDivisionError. Аргументи можуть бути числами з плаваючою комою, наприклад, «3,14%0,7» дорівнює «0,34» (оскільки «3,14» дорівнює «4*0,7 + 0,34»). Оператор модуля завжди дає результат із той же знак, що і його другий операнд (або нуль); абсолютне значення результату строго менше, ніж абсолютне значення другого операнда 1.

Оператори поділу поверху та модульні оператори з’єднані такою тотожністю: x == (x//y)*y + (x%y). Поділ на поверх і модуль також пов’язані з вбудованою функцією divmod(): divmod(x, y) == (x//y, x%y). 2.

На додаток до виконання операції за модулем над числами, оператор % також перевантажується рядковими об’єктами для виконання старого форматування рядків (також відомого як інтерполяція). Синтаксис для форматування рядків описано в Довіднику з бібліотеки Python, розділ Форматування рядків у стилі printf.

Операцію modulo можна налаштувати за допомогою спеціального методу __mod__().

Оператор поверхового ділення, оператор модуля та функція divmod() не визначені для комплексних чисел. Замість цього перетворіть на число з плаваючою комою за допомогою функції abs(), якщо потрібно.

Оператор + (додавання) повертає суму своїх аргументів. Обидва аргументи мають бути числами або обома послідовностями одного типу. У першому випадку числа перетворюються на загальний тип, а потім сумуються. В останньому випадку послідовності об’єднані.

Цю операцію можна налаштувати за допомогою спеціальних методів __add__() і __radd__().

Оператор - (віднімання) повертає різницю своїх аргументів. Числові аргументи спочатку перетворюються на загальний тип.

Цю операцію можна налаштувати за допомогою спеціального методу __sub__().