Пріоритет оператора
Оновлено: 24.04.2023
The following table summarizes the operator precedence in Python, from highest precedence (most binding) to lowest precedence (least binding). Operators in the same box have the same precedence. Unless the syntax is explicitly given, operators are binary. Operators in the same box group left to right (except for exponentiation and conditional expressions, which group from right to left).
Зауважте, що порівняння, тести на приналежність і тести ідентичності мають однаковий пріоритет і функцію ланцюжка зліва направо, як описано в розділі Порівняння.
Оператор |
опис |
---|---|
|
Прив’язка або вираз у дужках, відображення списку, відображення словника, відображення набору |
|
Підписка, нарізка, виклик, посилання на атрибути |
Очікуйте вираження |
|
|
Піднесення до степеня 5 |
|
Позитивне, негативне, побітове НІ |
|
Множення, матричне множення, ділення, поверхове ділення, залишок 6 |
|
Додавання і віднімання |
|
Зміни |
|
Побітове І |
|
Побітове XOR |
|
Порозрядне АБО |
Порівняння, включаючи тести на приналежність і тести на ідентифікацію |
|
Логічне НІ |
|
Логічне І |
|
Логічне АБО |
|
|
Умовний вираз |
Лямбда-вираз |
|
|
Вираз присвоєння |
Виноски
1 У той час як abs(x%y) < abs(y) є істинним математично, для чисельних чисел це може не бути істинним через округлення. Наприклад, якщо припустити, що платформа Python з плаваючою точкою є числом подвійної точності IEEE 754, для того, щоб -1e-100 % 1e100 мали той самий знак, що 1e100, обчислений результат буде -1e-100 + 1e100, що чисельно точно дорівнює 1e100. Функція math.fmod() повертає результат, знак якого збігається зі знаком першого аргументу, і тому в цьому випадку повертає -1e-100. Який підхід є більш доцільним, залежить від програми. 2 Якщо x дуже близький до точного цілого числа, кратного y, через округлення x//y може бути на одиницю більшим за (x-x%y)//y. У таких випадках Python повертає останній результат, щоб зберегти те, що divmod(x,y)[0] * y + x % y буде дуже близьким до x. 3 Стандарт Unicode розрізняє code points (наприклад, U+0041) і abstract characters (наприклад, «ЛАТИНСЬКА ВЕЛИКА ЛІТЕРА A»). У той час як більшість абстрактних символів у Unicode представлено лише за допомогою однієї кодової точки, існує ряд абстрактних символів, які, крім того, можуть бути представлені за допомогою послідовності з кількох кодових точок. Наприклад, абстрактний символ «ВЕЛИКА ЛАТИНСЬКА ЛІТЕРА C З ЦЕДІЛЬЄЮ» може бути представлений як один precomposed character у позиції коду U+00C7 або як послідовність base character у позиції коду U+0043 (ВЕЛИКА ЛАТИНСЬКА ЛІТЕРА C), за якою йде combining character у позиції коду U+0327 (КОМБІНУЮЧА CEDILLA). Оператори порівняння рядків порівнюються на рівні кодових точок Unicode. Людям це може бути не зрозуміло. Наприклад, "\u00C7" == "\u0043\u0327" є False, навіть якщо обидва рядки представляють той самий абстрактний символ «ЛАТИНСЬКА ВЕЛИКА ЛІТЕРА C З ЦЕДІЛЬЄЮ». Щоб порівняти рядки на рівні абстрактних символів (тобто інтуїтивно зрозумілим людям), використовуйте unicodedata.normalize(). 4 Завдяки автоматичному збиранню сміття, вільним спискам і динамічній природі дескрипторів ви можете помітити, здавалося б, незвичайну поведінку в певних випадках використання оператора is, як-от порівняння між методами екземплярів або константами. Щоб дізнатися більше, перегляньте їхню документацію. 5 Оператор степені ** прив’язує менш тісно, ніж арифметичний або порозрядний унарний оператор справа, тобто 2**-1 дорівнює 0,5. 6 Оператор % також використовується для форматування рядків; застосовується той самий пріоритет.