Операторы и выражения¶
Большинство предложений (логических строк) в программах содержат выражения. Простой пример выражения: 2 + 3
. Выражение можно разделить на операторы и операнды.
Операторы — это некий функционал, производящий какие-либо действия, который может быть представлен в виде символов, как например +
, или специальных зарезервированных слов. Операторы могут производить некоторые действия над данными, и эти данные называются операндами. В нашем случае 2
и 3
-- это операнды.
Операторы¶
Кратко рассмотрим операторы и их применение:
Обратите внимание, вычислить значения выражений, данных в примерах, можно также используя интерпретатор интерактивно. Например, для проверки выражения 2 + 3
воспользуйтесь интерактивной командной строкой интерпретатора Python:
1 2 3 4 |
|
Операторы и их применение
Оператор | Название | Объяснение | Примеры |
---|---|---|---|
+ | Сложение | Суммирует два объекта | 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. Обратите внимание на заглавные буквы в этих словах. | 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 . Здесь также может производиться укороченная оценка выражений. |
Краткая запись математических операций и присваивания¶
Зачастую результат проведения некой математической операции необходимо присвоить переменной, над которой эта операция производилась. Для этого существуют краткие формы записи выражений:
Вы можете записать:
1 |
|
в виде:
1 |
|
Обратите внимание, что выражения вида "переменная = переменная операция выражение
" принимает вид "переменная операция = выражение
".
Порядок вычисления¶
Если имеется выражение вида 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
):
1 2 3 4 5 6 |
|
Вывод:
1 2 3 |
|
Как это работает:
Длина и ширина прямоугольника хранятся в переменных length
и breadth
соответственно. Мы используем их для вычисления периметра и площади прямоугольника при помощи выражений. Результат выражения length * breadth
сохраняется в переменной area
, после чего выводится на экран функцией print
. Во втором случае мы напрямую подставляем значение выражения 2 * (length + breadth)
в функцию print
.
Также обратите внимание, как Python "красиво печатает" результат. Несмотря на то, что мы не указали пробела между 'Площадь равна'
и переменной area
, Python подставляет его за нас, чтобы получить красивый и понятный вывод. Программа же остаётся при этом легкочитаемой (поскольку нам не нужно заботиться о пробелах между строками, которые мы выводим). Это пример того, как Python облегчает жизнь программисту.
Резюме¶
Мы увидели, как пользоваться операторами, операндами и выражениями. Это основные строительные блоки любой программы. Далее мы увидим, как это применить на практике.