Операторы и выражения¶
Большинство предложений (логических строк) в программах содержат выражения.
Простой пример выражения: 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 даст 6.
'la' * 3 даст 'lalala'. |
** |
Возведение в степень | Возвращает
число х,
возведённое в
степень y |
3 ** 4 даст 81
(т.е. 3 * 3 * 3 * 3) |
/ |
Деление | Возвращает
частное от
деления x
на y |
4 / 3 даст 1.3333333333333333. |
// |
Целочисленное деление | Возвращает неполное частное от деления | 4 // 3 даст 1.
-4 // 3 даст -2. |
% |
Деление по модулю | Возвращает остаток от деления | 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].
Обратите
внимание на
заглавные буквы
в этих словах. |
а Можно составлять произвольные цепочки
сравнений: |
> |
Больше | Определяет,
верно ли, что
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.
Выражения¶
Пример (сохраните как 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, после чего выводится на экран функцией2 * (length + breadth)в функциюТакже обратите внимание, как Python “красиво печатает” результат. Несмотря на то, что мы не указали пробела между
'Площадь равна'и переменнойarea, Python подставляет его за нас, чтобы получить красивый и понятный вывод. Программа же остаётся при этом легкочитаемой (поскольку нам не нужно заботиться о пробелах между строками, которые мы выводим). Это пример того, как Python облегчает жизнь программисту.
Резюме¶
Мы увидели, как пользоваться операторами, операндами и выражениями. Это основные строительные блоки любой программы. Далее мы увидим, как это применить на практике.