Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 16502 / 504 | Оценка: 4.18 / 3.71 | Длительность: 16:16:00
ISBN: 978-5-9556-0109-0
Лекция 1:

Введение в программирование на языке Python

Лекция 1: 12345678 || Лекция 2 >

Выражения

В современных языках программирования принято производить большую часть обработки данных в выражениях. Синтаксис выражений у многих языков программирования примерно одинаков. Синтаксис выражений Python не удивит программиста чем-то новым. (Разве что цепочечные сравнения могут приятно порадовать.)

Приоритет операций показан в нижеследующей таблице (в порядке увеличения). Для унарных операций x обозначает операнд. Ассоциативность операций в Python - слева-направо, за исключением операции возведения в степень ( ** ), которая ассоциативна справа налево.

Операция Название
lambda лямбда-выражение
or логическое ИЛИ
and логическое И
not x логическое НЕ
in, not in проверка принадлежности
is, is not проверка идентичности
<,<=,>,>=,!=,== сравнения
| побитовое ИЛИ
^ побитовое исключающее ИЛИ
& побитовое И
<<, >> побитовые сдвиги
+, - сложение и вычитание
*, /, % умножение, деление, остаток
+x, -x унарный плюс и смена знака
~x побитовое НЕ
** возведение в степень
x.атрибут ссылка на атрибут
x[индекс] взятие элемента по индексу
x[от:до] выделение среза (от и до)
f(аргумент,...) вызов функции
( ... ) скобки или кортеж
[ ... ] список или списковое включение
{кл:зн, ...} словарь пар ключ-значение
`выражения` преобразование к строке (repr)

Таким образом, порядок вычислений операндов определяется такими правилами:

  1. Операнд слева вычисляется раньше операнда справа во всех бинарных операциях, кроме возведения в степень.
  2. Цепочка сравнений вида a < b < c ... y < z фактически равносильна: (а < b) and (b < c) and ... and (y < z).
  3. Перед фактическим выполнением операции вычисляются нужные для нее операнды. В большинстве бинарных операций предварительно вычисляются оба операнда (сначала левый), но операции or и and, а также цепочки сравнений вычисляют такое количество операндов, которое достаточно для получения результата. В невычисленной части выражения в таком случае могут даже быть неопределенные имена. Это важно учитывать, если используются функции с побочными эффектами.
  4. Аргументы функций, выражения для списков, кортежей, словарей и т.п. вычисляются слева-направо, в порядке следования в выражении.

В случае неясности приоритетов желательно применять скобки. Несмотря на то, что одни и те же символы могут использоваться для разных операций, приоритеты операций не меняются. Так, % имеет тот же приоритет, что и *, а потому в следующем примере скобки просто необходимы, чтобы операция умножения произошла перед операцией форматирования:

print "%i" % (i*j)

Выражения могут фигурировать во многих операторах Python и даже как самостоятельный оператор. У выражения всегда есть результат, хотя в некоторых случаях (когда выражение вычисляется ради побочных эффектов) этот результат может быть "ничем" - None.

Очень часто выражения стоят в правой части оператора присваивания или расширенного присваивания. В Python (в отличие, скажем, от C) нет операции присваивания, поэтому синтаксически перед знаком = могут стоять только идентификатор, индекс, срез, доступ к атрибуту или кортеж (список) из перечисленного. (Подробности в документации).

Лекция 1: 12345678 || Лекция 2 >
Андрей Егоров
Андрей Егоров

def bin(n):

"""Цифры двоичного представления натурального числа """

if n == 0:

   return []

n, d = divmod(n, 2)

return bin(n) + [d]

print bin(69)

Что значит здесь return[] ? Возвращает список? Непонятно какой список? Откуда он? 

 

 

Асмик Гаряка
Асмик Гаряка

Почему при вычислении рейтинга не учитывается уровень, как описано? Для всех курсов У=1, хотя для Специалист должно быть 2.

Аделина Федорова
Аделина Федорова
Россия, 155900