Язык программирования Python (Сузи) - страница 12

Приоритет операций показан в нижеследующей таблице (в порядке уменьшения). Для унарных операций >x обозначает операнд. Ассоциативность операций в Python — слева–направо, за исключением операции возведения в степень (>**), которая ассоциативна справа налево.

ОперацияНазвание
>lambdaлямбда–выражение
>orлогическое ИЛИ
>andлогическое И
>not xлогическое НЕ
>in, >not inпроверка принадлежности
>is, >is notпроверка идентичности
><, ><=, >>, >>=, >!=, >==сравнения
>|побитовое ИЛИ
>^побитовое исключающее ИЛИ
>&побитовое И
><<, >>>побитовые сдвиги
>+>-сложение и вычитание
>*, >/, >%умножение, деление, остаток
>+x, >-xунарный плюс и смена знака
>~xпобитовое НЕ
>**возведение в степень
>x.атрибутссылка на атрибут
>x[индекс]взятие элемента по индексу
>x[от:до]выделение среза (от и до)
>f(аргумент, ...)вызов функции
>( ... )скобки или кортеж
>[ ... ]список или списковое включение
>{кл:зн, ...}словарь пар ключ–значение
>`выражения`преобразование к строке (repr)

Таким образом, порядок вычислений операндов определяется такими правилами:

1. Операнд слева вычисляется раньше операнда справа во всех бинарных операциях, кроме возведения в степень.

2. Цепочка сравнений вида >a < b < c ... y < z фактически равносильна: >(а < b) and (b < c) and ... and (y < z).

3. Перед фактическим выполнением операции вычисляются нужные для нее операнды. В большинстве бинарных операций предварительно вычисляются оба операнда (сначала левый), но операции >or и >and, а также цепочки сравнений вычисляют такое количество операндов, которое достаточно для получения результата. В невычисленной части выражения в таком случае могут даже быть неопределенные имена. Это важно учитывать, если используются функции с побочными эффектами.

4. Аргументы функций, выражения для списков, кортежей, словарей и т.п. вычисляются слева–направо, в порядке следования в выражении.

В случае неясности приоритетов желательно применять скобки. Несмотря на то, что одни и те же символы могут использоваться для разных операций, приоритеты операций не меняются. Так, >% имеет тот же приоритет, что и >*, а потому в следующем примере скобки просто необходимы, чтобы операция умножения произошла перед операцией форматирования:

>print "%i" % (i*j)

Выражения могут фигурировать во многих операторах Python и даже как самостоятельный оператор. У выражения всегда есть результат, хотя в некоторых случаях (когда выражение вычисляется ради побочных эффектов) этот результат может быть «ничем» — >None.

Очень часто выражения стоят в правой части оператора присваивания или расширенного присваивания. В Python (в отличие, скажем, от C) нет операции присваивания, поэтому синтаксически перед знаком