post

Python ru:Operators and Expressions

Contents

Введение

Большинство предложений (логических строк), написанных вами, будут содержать выражения. Простой пример выражения: 2 + 3. Выражение можно разделить на операторы и операнды.

Операторы – это некий функционал, производящий какие-либо действия, который может быть представлен в виде символов, как например, +, или специальных зарезервированных слов. Операторы могут производить некоторые действия над данными, и эти данные называются операндами. В нашем случае 2 и 3 – это операнды.

Операторы

Кратко рассмотрим операторы и их применение:

Обратите внимание, что вы можете вычислить значения выражений, данных в примерах, используя интерпретатор интерактивно. Например, для проверки выражения 2 + 3 воспользуйтесь приглашением интерактивного интерпретатора Python:

>>> 2 + 3
5
>>> 3 * 5
15
>>>
Операторы и их применение

Оператор

Название

Объяснение

Примеры

+

Сложение

Суммирует два объекта

3 + 5 даст 8. 'a' + 'b' даст 'ab'.

Вычитание

Даёт разность двух чисел; если первый операнд отсутствует, он считается равным нулю.

-5.2 даст отрицательное число, а 50 - 24 даст 26.

*

Умножение

Даёт произведение двух чисел или возвращает строку, повторённую заданное число раз.

2 * 3 gives 6. 'la' * 3 gives 'lalala'.

**

Возведение в степень

Возвращает число х, возведённое в степень y

3 ** 4 даст 81 (i.e. 3 * 3 * 3 * 3)

/

Деление

Возвращает частное от деления x на y

4 / 3 даст 1.3333333333333333.

//

Целочисленное деление

Возвращает неполное частное от деления

4 // 3 даст 1.

%

Деление по модулю

Возвращает остаток от деления

8% 3 даст 2. -25.5% 2.25 даст 1.5.

<<

Сдвиг влево

Сдвигает биты числа влево на заданное количество позиций. (Любое число в памяти компьютера представлено в виде битов – или двоичных чисел, т.е. 0 и 1)

2 << 2 даст 8. В двоичном виде 2 представляет собой 10. Сдвиг влево на 2 бита даёт 1000, что в десятичном виде означает 8.

>>

Сдвиг вправо

Сдвигает биты числа вправо на заданное число позиций.

11 >> 1 даст 5. В двоичном виде 11 представляется как 1011, что будучи смещённым на 1 бит вправо, даёт 101, а это, в свою очередь, ни что иное как десятичное 5.

&

Побитовое И

Побитовая операция И над числами

5 & 3 даёт 1.

|

Побитовое ИЛИ

Побитовая операция ИЛИ над числами

5 | 3 даёт 7

^

Побитовое ИСКЛЮЧИТЕЛЬНО ИЛИ

Побитовая операция ИСКЛЮЧИТЕЛЬНО ИЛИ

5 ^ 3 даёт 6

~

Побитовое НЕ

Побитовая операция НЕ для числа x соответствует -(x+1)

~5 даёт -6.

<

Меньше

Определяет, верно ли, что x меньше y. Все операторы сравнения возвращают True или False[1]. Обратите внимание на заглавные буквы в этих словах.

5 < 3 даст False, а 3 < 5 даст True.

Можно составлять произвольные цеопчки сравнений: 3 < 5 < 7 даёт True.

>

Больше

Определяет, верно ли, что x больше y

5 > 3 даёт True. Если оба операнда – числа, то перед сравнением они оба преобразуются к одинаковому типу. В противном случае всегда возвращается False.

<=

Меньше или равно

Определяет, верно ли, что x меньше или равно y

x = 3; y = 6; x <= y даёт True.

>=

Больше или равно

Определяет, верно ли, что x больше или равно y

x = 4; y = 3; x >= 3 даёт True.

==

Равно

Проверяет, одинаковы ли объекты

x = 2; y = 2; x == y даёт True.

x = 'str'; y = 'stR'; x == y даёт False.

x = 'str'; y = 'str'; x == y даёт True.

!=

Не равно

Проверяет, верно ли, что объекты не равны

x = 2; y = 3; x!= y даёт True.

not

Логическое НЕ

Если x равно True, оператор вернёт False. Если же x равно False, получим True.

x = True; not x даёт False.

and

Логическое И

x and y даёт False, если x равно False, в противном случае возвращает значение y

x = False; y = True; x and y возвращает False, поскольку x равно False. В этом случае Python не станет проверять значение y, так как уже знает, что левая часть выражения ‘and’ равняется False, что подразумевает, что и всё выражение в целом будет равно False, независимо от значений всех остальных операндов. Это называется укороченной оценкой булевых (логических) выражений.

or

Логическое ИЛИ

Если x равно True, в результате получим True, в противном случае получим значение y

x = True; y = False; x or yдаёт True. Здесь также может производиться укороченная оценка выражений.

Краткая запись мат. операций и присваивания

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

Вы можете записать:

a = 2; a = a * 3

в виде:

a = 2; a *= 3

Обратите внимание, что выражения вида “переменная = переменная операция выражение” принимает вид “переменная операция= выражение“.

Порядок вычисления

Если у вас есть выражение вида 2 + 3 * 4, что производится раньше: сложение или умножение? В школьном курсе математики говорится, что умножение должно производиться в первую очередь. Это означает, что оператор умножения имеет более высокий приоритет, чем оператор сложения.

Следующая таблица показывает приоритет операторов в Python, начиная с самого низкого (самое слабое связывание) и до самого высокого (самое сильное связывание). Это означает, что в любом выражении Python сперва вычисляет операторы и выражения, расположенные внизу таблицы, а затем операторы выше по таблице.

Эта таблица взята с Справочника по языку Python (англ.) и приводится здесь для полноты описания. На практике лучше использовать скобки для группировки операторов и операндов с тем, чтобы в явном виде указать порядок вычисления выражений. Это делает программу более легкочитаемой. Более подробно см. в разделе Изменение порядка вычисления ниже.

Приоритет операторов

Оператор

Описание

lambda

лямбда-выражение

or

Логическое ИЛИ

and

Логическое И

not x

Логическое НЕ

in, not in

Проверка принадлежности

is, is not

Проверка тождественности

<, <=, >, >=,!=, ==

Сравнения

|

Побитовое ИЛИ

^

Побитовое ИСКЛЮЧИТЕЛЬНО ИЛИ

&

Побитовое И

<<, >>

Сдвиги

+, –

Сложение и вычитание

*, /, //, %

Умножение, деление, целочисленное деление и остаток от деления

+x, -x

Положительное, отрицательное

~x

Побитовое НЕ

**

Возведение в степень

x.attribute

Ссылка на атрибут

x[индекс]

Обращение по индексу

x[индекс1:индекс2]

Вырезка

f(аргументы …)

Вызов функции

(выражения, …)

Связка или кортеж[2]

[выражения, …]

Список

{ключ:данные, …}

Словарь

Операторы, о которых мы не упомянули, будут объяснены в дальнейших главах.

Операторы с равным приоритетом расположены в одной строке в этой таблице. например, + и - имеют равный приоритет.

Изменение порядка вычисления

Чтобы выражения были более читаемыми, можно использовать скобки. Например, 2 + (3 * 4) определённо легче понять, чем 2 + 3 * 4, которое требует знания приоритета операторов. Как и всё остальное, скобки нужно использовать разумно (не перестарайтесь) и избегать излишних, как в (2 + (3 * 4)).

Есть ещё одно преимущество в использовании скобок – они дают возможность изменить порядок вычисления выражений. Например, если вы хотите, чтобы сложение проиводилось прежде умножения, вы можете записать нечно вроде (2 + 3) * 4.

Ассоциативность

Операторы обычно обрабатываются слева направо. Это означает, что операторы с равным приоритетом будут обработаны по порядку от левого до правого. Например, 2 + 3 + 4 обрабатывается как (2 + 3) + 4. Некоторые операторы, как например, оператор присваивания, имеют ассоциативность справа налево, т.е. a = b = c рассматривается как a = (b = c).

Выражения

Пример:

#!/usr/bin/python
# Filename: expression.py

length = 5
breadth = 2

area = length * breadth
print('Площадь равна', area)
print('Периметр равен', 2 * (length + breadth))

Вывод:

   $ python expression.py
   Площадь равна 10
   Периметр равен 14

Как это работает:

Длина и ширина прямоугольника хранятся в переменных length и breadth соответственно. Мы используем их для вычисления периметра и площади прямоугольника при помощи выражений length * breadth в переменной area, а затем выведем результат функцией print. Во втором случае мы напрямую используем значение выражения 2 * (length + breadth) в функции print.

Также обратите внимание, как Python “красиво печатает” результат. Несмотря на то, что мы не указали пробела между 'Площадь равна' и переменной area, Python подставляет его за нас, чтобы мы получили красивый и понятный вывод, а программа остаётся легкочитаемой (поскольку нам не нужно заботиться о пробелах между строками, которые мы выводим). Это пример того, как Python облегчает жизнь программисту.

Резюме

Мы увидели, как пользоваться операторами, операндами и выражениями – это основные строительные блоки любой программы. Далее мы увидим, как это применить в наших программах с операторами.

Примечания

  1. “True” – англ. Верно (Правда); “False” – англ. Ошибочно (Ложь). (прим. перев.)
  2. “tuple” – англ. кортеж (прим. перев.)

Advertisements