- Операторы в Python
- Арифметические операторы
- Операторы сравнения
- Побитовые операторы
- Операторы присваивания
- Особые операторы
- Операторы тождественности
- Операторы принадлежности
- Операторы и выражения¶
- Операторы¶
- Краткая запись математических операций и присваивания¶
- Порядок вычисления¶
- Изменение порядка вычисления¶
- Ассоциативность¶
- Выражения¶
- Резюме¶
Операторы в Python
Операторы — специальные символы, которые выполняют арифметические и логические вычисления. Значения, на которые действует оператор, называются операндами.
Здесь оператор + выполняет сложение, 2 и 3 — операнды, а 5 — вывод операции.
Арифметические операторы
Арифметические операторы используются для выполнения математических операций — сложения, вычитания, умножения и т. д.
Сложение двух операндов или унарный плюс
Вычитание правого оператора из левого или унарный минус
Деление левого операнда на правый (результат всегда типа float)
Остаток от деления левого операнда на правый
Деление с округлением — деление, результат которого корректируется в меньшую сторону
Показатель степени — левый операнд возводится в значение правого операнда
x = 15 y = 4 # Вывод: x + y = 19 print('x + y =', x+y) # Вывод: x - y = 11 print('x - y =', x-y) # Вывод: x * y = 60 print('x * y =', x*y) # Вывод: x / y = 3.75 print('x / y =', x/y) # Вывод: x // y = 3 print('x // y =', x//y) # Вывод: x ** y = 50625 print('x ** y =', x**y)
x + y = 19
x - y = 11
x * y = 60
x / y = 3.75
x // y = 3
x ** y = 50625
Операторы сравнения
Операторы сравнения используются для сравнения значений, они возвращают True или False в зависимости от условия.
Больше чем: True, если левый операнд больше правого
Меньше чем: True, если левый операнд меньше правого
Равно: True, если операнды равны между собой
Не равно: True, если операнды не равны между собой
Больше или равно: True, если левый операнд больше или равен правому
Меньше или равно: True, если левый операнд меньше или равен правому
x = 10 y = 12 # Вывод: x > y — False print('x > y —', x>y) # Вывод: x < y — True print('x < y —', x= y — False print('x >= y —', x>=y) # Вывод: x
x > y — False
x < y — True
x == y — False
x != y — True
x >= y — False
xЛогические операторы
Операторы and , or , not — логические.
True, если значения обоих операндов True
True, если значение одного из операндов True
True, если значение операнда False (дополняет значение операнда)
x = True y = False print('x and y —', x and y) print('x or y —', x or y) print('not x —', not x)
x and y — False
x or y — True
not x — FalseПобитовые операторы
Побитовые операторы работают с операндами как со строками из 0 и 1. Они действуют бит за битом, как и говорит название.
Например, 2 в двоичной системе счисления — 10 , а 7 — 111 .
В таблице ниже: x = 10 ( 00001010 в двоичной системе счисления) и y = 4 ( 00000100 в двоичной системе счисления)
Операторы присваивания
Операторы присваивания используются для назначения переменной некоторого значения.
a = 5 — простой оператор присваивания, который приравнивает значение 5 справа переменной а слева.
В Python множество составных операторов, подобных a += 5 — он прибавляет 5 к переменной a и позже присваивает ей получившееся значение. Этот оператор равносилен записи a = a + 5 .
Эквивалентно
Особые операторы
В Python есть особые типы операторов: операторы тождественности и принадлежности.
Операторы тождественности
is и is not — операторы тождественности в Python. Они проверяют, находятся ли два значения (или две переменные) по одному адресу в памяти. То, что две переменные равны еще не значит, что они идентичны.
True, если операнды идентичны (указывают на один объект)
True, если операнды не идентичны (не указывают на один объект)
x1 = 5 y1 = 5 x2 = 'Привет' y2 = 'Привет' x3 = [1,2,3] y3 = [1,2,3] # Вывод: False print(x1 is not y1) # Вывод: True print(x2 is y2) # Вывод: False print(x3 is y3)
Мы видим, что x1 и y1 — целочисленные переменные с одинаковыми значениями, поэтому они равны и идентичны. То же с x2 и y2 (строки).
Но x3 и y3 — списки. Они равны, но не идентичны, поскольку интерпретатор кладет их в разные места в памяти, хоть эти списки и равны.
Операторы принадлежности
in и not in — операторы принадлежности в Python. Они проверяют, есть ли значение или переменная в последовательности (строке, списке, кортеже, множестве или словаре). Иначе говоря, проверяют вхождение элемента в коллекцию. В словаре можно проверить только присутствие ключа, не значения.
True, если значение или переменная есть в последовательности
True, если значения или переменной нет в последовательности
x = 'Привет, мир' y = # Вывод: True print('П' in x) # Вывод: True print('привет' not in x) # Вывод: True print(1 in y) # Вывод: False print('б' in y)
'П' есть в x , а вот строки 'привет' в x нет (помните: Python чувствителен к регистру). Таким же образом образом 1 — ключ, а 'a' — значение в словаре y , поэтому вывод 'б' in y — False .
Операторы и выражения¶
Большинство предложений (логических строк) в программах содержат выражения. Простой пример выражения: 2 + 3 . Выражение можно разделить на операторы и операнды.
Операторы — это некий функционал, производящий какие-либо действия, который может быть представлен в виде символов, как например + , или специальных зарезервированных слов. Операторы могут производить некоторые действия над данными, и эти данные называются операндами. В нашем случае 2 и 3 -- это операнды.
Операторы¶
Кратко рассмотрим операторы и их применение:
Обратите внимание, вычислить значения выражений, данных в примерах, можно также используя интерпретатор интерактивно. Например, для проверки выражения 2 + 3 воспользуйтесь интерактивной командной строкой интерпретатора Python:
Операторы и их применение
Оператор | Название | Объяснение | Примеры |
---|---|---|---|
+ | Сложение | Суммирует два объекта | 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 | |
>> | Сдвиг вправо | Сдвигает биты числа вправо на заданное число позиций. | 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 | |
>= | Больше или равно | Определяет, верно ли, что 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 . Здесь также может производиться укороченная оценка выражений. |
Краткая запись математических операций и присваивания¶
Зачастую результат проведения некой математической операции необходимо присвоить переменной, над которой эта операция производилась. Для этого существуют краткие формы записи выражений:
Обратите внимание, что выражения вида " переменная = переменная операция выражение " принимает вид " переменная операция = выражение ".
Порядок вычисления¶
Если имеется выражение вида 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 , после чего выводится на экран функцией print . Во втором случае мы напрямую подставляем значение выражения 2 * (length + breadth) в функцию print .
Также обратите внимание, как Python "красиво печатает" результат. Несмотря на то, что мы не указали пробела между 'Площадь равна' и переменной area , Python подставляет его за нас, чтобы получить красивый и понятный вывод. Программа же остаётся при этом легкочитаемой (поскольку нам не нужно заботиться о пробелах между строками, которые мы выводим). Это пример того, как Python облегчает жизнь программисту.
Резюме¶
Мы увидели, как пользоваться операторами, операндами и выражениями. Это основные строительные блоки любой программы. Далее мы увидим, как это применить на практике.
- "True" - англ. "Верно (Правда)"; "False" - англ. "Ошибочно (Ложь)". (прим. перев.) ↩
- "tuple" - англ. "кортеж" (прим. перев.) ↩