Операторы и выражения

Большинство предложений (логических строк) в программах содержат выражения. Простой пример выражения: 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
    • 13 / 3 даст 4.333333333333333
  • // (целочисленное деление)

    • Разделить x на y и округлить ответ вниз до ближайшего целочисленного значения. Обратите внимание, что если одно из значений является float, вы получите обратно float.
    • 13 // 3 даст 4
    • -13 // 3 даст -5
    • 9//1.81 даст 4.0
  • % (модуль)

    • Возвращает остаток от деления
    • 13 % 3 даст 1. -25.5 % 2.25 даст 1.5.
  • << (сдвиг влево)

    • Сдвигает биты числа влево на заданное количество позиций. (Любое число в памяти компьютера представлено в виде битов - или двоичных чисел, т.е. 0 и 1)
    • 2 << 2 даст 8. В двоичном виде 2 представляет собой 10.
    • Сдвиг влево на 2 бита даёт 1000, что в десятичном виде означает 8.
  • >> (сдвиг вправо)

    • Сдвигает биты числа вправо на заданное число позиций.
    • 11 >> 1 даст 5.
    • В двоичном виде 11 представляется как 1011, что будучи смещённым на 1 бит вправо, даёт 101, а это, в свою очередь, не что иное как десятичное 5.
  • & (побитовое И)

    • Побитовая операция И над числами: если оба бита равны 1, то результат равен 1. В противном случае - 0.
    • 5 & 3 даст 1 (0101 & 0011 даст 0001)
  • | (побитовое ИЛИ)

    • Побитовая операция ИЛИ над числами: если оба бита равны 0, то результат равен 0. В противном случае - 1.
    • 5 | 3 даст 7 (0101 | 0011 даст 0111)
  • ^ (побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ)

    • Побитовая операция ИСКЛЮЧАЮЩЕЕ ИЛИ: если оба бита (1 или 0) одинаковы, результатом будет 0. В противном случае - 1.
    • 5 ^ 3 даст 6 (O101 ^ 0011 даст 0110)
  • ~ (побитовое НЕ)

    • Побитовая операция НЕ для числа x соответствует -(x+1)
    • ~5 даст -6. Более подробная информация на сайте http://stackoverflow.com/a/11810203
  • < (меньше)

    • Определяет, верно ли, что x меньше y. Все операторы сравнения возвращают True или False. Обратите внимание на заглавные буквы в этих словах.
    • 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 : Лямбда-выражение
  • if - else : Условное выражение
  • or : Логическое ИЛИ
  • and : Логическое И
  • not x : Логическое НЕ
  • in, not in, is, is not, <, <=, >, >=, !=, == : Сравнения, включая тесты на принадлежность и тесты на идентичность
  • | : Побитовое ИЛИ
  • ^ : Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ
  • & : Побитовое И
  • <<, >> : Сдвиги
  • +, - : Сложение и вычитание
  • *, /, //, % : Умножение, деление, целочисленное деление и остаток от деления
  • +x, -x, ~x : Положительное, отрицательное, побитовое НЕ
  • ** : Возведение в степень
  • x[index], x[index:index], x(arguments...), x.attribute : Обращение по индексу, срез, вызов функции, ссылка на атрибут
  • (expressions...), [expressions...], {key: value...}, {expressions...} : Отображение связки или кортежа, отображение списка, отображение словаря, отображение множества

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

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

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

Для облегчения чтения выражений можно использовать скобки. Например, 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 облегчает жизнь программисту.

Резюме

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

results matching ""

    No results matching ""