Двійкові арифметичні операції
Оновлено: 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__().