Выражение — конструкция языка Python, порождающая некоторое значение, которое можно, например, присвоить переменной. Иначе говоря, выражение — это запись некоторой формулы.
Элементы выражения:
У операторов есть приоритет и ассоциативность. Приоритет задаёт порядок связывания нескольких знаков операций, расположенных «рядом». Ассоциативность — порядок вычислений (слева направо или справа налево) для операций с равным приоритетом.
Например, приоритет у умножения выше, чем приоритет у сложения. Таким образом,
запись a + b * c будет трактоваться как a + (b * c), т.е. сначала свяжутся
b и c при помощи знака *, затем a и подвыражение b * c при помощи +.
Левая ассоциативность означает, что в выражении a + b - c + d операции +
и - будут выполняться слева направо: ((a + b) - c) + d.
Правая ассоциативность — наоборот. Единственная операция в Python, имеющая
правую ассоциативность — возведение в степень. Выражение 2 ** 2 ** 3
трактуется как 2 ** (2 ** 3), а не (2 ** 2) ** 3.
>>> 2 ** 2 ** 3
256
>>> 2 ** (2 ** 3)
256
>>> (2 ** 2) ** 3
64
Рассмотрим таблицу приоритетов операций (операции перечислены в порядке убывания приоритета, операции с равным приоритетом находятся в одной строке таблицы):
| Операторы | Пояснение |
[...], {...} |
Построение списков, словарей, множеств |
f(...) |
Вызов функции |
xs[...] |
Индексация списков, строк и т.д. |
x.attr, x.f(...) |
Обращение к атрибуту, вызов метода |
** |
Возведение в степень |
~x |
Битовое отрицание |
+x, -x |
Знак числа |
*, /, %, // |
Операции умножения, деления, взятия остатка |
+, - |
Сложение и вычитание |
<<, >> |
Битовые сдвиги |
& |
Битовое «И» |
^ |
Битовое исключающее «ИЛИ» |
| |
Битовое «ИЛИ» |
in, not in, is, is not, |
Сравнение, принадлежность, тождественность |
<, <=, >, >=, !=, == |
|
not x |
Логическое отрицание |
and |
Логическое «И» |
or |
Логическое «ИЛИ» |
lambda |
Лямбда-выражение (безымянная функция) |
, |
Построение кортежей |
Мы можем написать выражение
x + a**b * c > 7 or z - y == 5 and -xs[5] in ys
и ни разу не использовать скобки. Арифметические операции (которые вычисляют
числа) имеют приоритет выше, чем операции отношения (>, ==, in),
операции отношения имеют приоритет выше, чем логические операции.
x.a, x.f(...))Python — объектно-ориентированный язык, т.е. поддерживает объекты — сущности, объединяющие в себе данные и операции над ними. Данные, которые хранятся в объектах, находятся в именованных ячейках, так называемых, атрибутах. Для обращения к атрибуту объекта используется запись
obj.attr
где obj — объект, а attr — имя атрибута.
Методы — это функции, связанные с объектами. Вызов метода выглядит так:
obj.func(‹аргументы›)
где obj — объект, func — имя метода.
Все типы данных в Python’е, в том числе и встроенные, являются объектами, многие полезные операции с ними вызываются как методы.
В Python’е числа могут быть целыми (типа int) и дробными (действительными,
вещественными) (типа float). Внешне они отличаются наличием запятой или
порядка степени (буквы e) в записи числа.
Пример. 100 — целое, 100.0 — дробное.
Операция деления / всегда порождает дробное число, даже если производится
без остатка:
>>> 100 / 30
3.3333333333333
>>> 100 / 5
20.0
Для ряда задач нужна операция деления, которая даёт целое число. Она
обозначается // — результатом всегда является целое, дробная часть
отбрасывается:
>>> 100 // 30
3
>>> 100 // 3
33
>>> 100 // 5
20
Операция вычисления остатка обозначается как %:
>>> 100 % 30
10
>>> 100 % 3
1
>>> 100 % 5
0
Если меньшее делим на большее, то // даст ноль, а % даст делимое:
>>> 5 / 10
0.5
>>> 5 // 10
0
>>> 5 % 10
5
,), она порождает кортежКортеж (тип данных tuple) — неизменяемая структура данных, которая
хранит в себе несколько значений, значения индексируются целыми числами
начиная с 0. При выводе кортеж изображается как перечисление значений через
запятую в круглых скобках
Пример. Создадим кортеж t3, состоящий из трёх чисел:
>>> t3 = 3, 7.5, 100500
>>> t3
(3, 7.5, 100500)
>>> t3[0]
3
>>> t3[1]
7.5
>>> t3[2]
100500
Распространённая ошибка — записать дробное число через запятую и случайно построить кортеж:
>>> 100 ** 0.5
10.0
>>> 100 ** 0,5
(1, 5)
Почему мы получили кортеж (1, 5)? Потому что нулевым элементом кортежа будет
100 ** 0 (любое число, кроме нуля, в нулевой степени — 1), первым элементом —
число 5.
Запись
100 ** 0,5
идентична следующей (добавлены пробелы для наглядности):
100**0, 5
Ещё пример:
>>> 100 ** 0.5 + 1
11.0
>>> 100 ** 0,5 + 1
(1, 6)
>>> (100 ** 0.5) + 1
11.0
>>> (100 ** 0,5) + 1
ОШИБКА: нельзя сложить tuple и int