Операция
|
Название
|
lambda
|
лямбда-выражение
|
or
|
логическое ИЛИ
|
and
|
логическое И
|
not x
|
логическое НЕ
|
in, not in
|
проверка принадлежности
|
is, is not
|
проверка идентичности
|
<,<=,>,>=,!=,==
|
сравнения
|
|
|
побитовое ИЛИ
|
^
|
побитовое исключающее ИЛИ
|
&
|
побитовое И
|
<<, >>
|
побитовые сдвиги
|
+, -
|
сложение и вычитание
|
*, /, %
|
умножение, деление, остаток
|
+x, -x
|
унарный плюс и смена знака
|
~x
|
побитовое НЕ
|
**
|
возведение в степень
|
x.атрибут
|
ссылка на атрибут
|
x[индекс]
|
взятие элемента по индексу
|
x[от:до]
|
выделение среза (от и до)
|
f(аргумент,...)
|
вызов функции
|
( ... )
|
скобки или кортеж
|
[ ... ]
|
список или списковое включение
|
{кл:зн, ...}
|
словарь пар ключ-значение
|
`выражения`
|
преобразование к строке (repr)
|
Таким образом, порядок вычислений операндов определяется такими правилами:
Операнд слева вычисляется раньше операнда справа во всех бинарных операциях, кроме возведения в степень.
Цепочка сравнений вида a < b < c ... y < z фактически равносильна: (а < b) and (b < c) and ... and (y < z).
Перед фактическим выполнением операции вычисляются нужные для нее операнды. В большинстве бинарных операций предварительно вычисляются оба операнда (сначала левый), но операции or и and, а также цепочки сравнений вычисляют такое количество операндов, которое достаточно для получения результата. В невычисленной части выражения в таком случае могут даже быть неопределенные имена. Это важно учитывать, если используются функции с побочными эффектами.
Аргументы функций, выражения для списков, кортежей, словарей и т.п. вычисляются слева-направо, в порядке следования в выражении.
В случае неясности приоритетов желательно применять скобки. Несмотря на то, что одни и те же символы могут использоваться для разных операций, приоритеты операций не меняются. Так, % имеет тот же приоритет, что и *, а потому в следующем примере скобки просто необходимы, чтобы операция умножения произошла перед операцией форматирования:
print "%i" % (i*j)
Выражения могут фигурировать во многих операторах Python и даже как самостоятельный оператор. У выражения всегда есть результат, хотя в некоторых случаях (когда выражение вычисляется ради побочных эффектов) этот результат может быть "ничем" - None.
Очень часто выражения стоят в правой части оператора присваивания или расширенного присваивания. В Python (в отличие, скажем, от C) нет операции присваивания, поэтому синтаксически перед знаком = могут стоять только идентификатор, индекс, срез, доступ к атрибуту или кортеж (список) из перечисленного. (Подробности в документации).
Имена
Об именах (идентификаторах) говорилось уже не раз, тем не менее, необходимо сказать несколько слов об их применении в языке Python.
Имя может начинаться с латинской буквы (любого регистра) или подчеркивания, а дальше допустимо использование цифр. В качестве идентификаторов нельзя применять ключевые слова языка и нежелательно переопределять встроенные имена. Список ключевых слов можно узнать так:
>>> import keyword
>>> keyword.kwlist
['and', 'assert', 'break', 'class', 'continue', 'def', 'del',
'elif', 'else', 'except', 'exec', 'finally', 'for', 'from',
'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or',
'pass', 'print', 'raise', 'return', 'try', 'while', 'yield']
Имена, начинающиеся с подчеркивания или двух подчеркиваний, имеют особый смысл. Одиночное подчеркивание говорит программисту о том, что имя имеет местное применение, и не должно использоваться за пределами модуля. Двойным подчеркиванием в начале и в конце обычно наделяются специальные имена атрибутов - об этом будет говориться в лекции по объектно-ориентированному программированию.
В каждой точке программы интерпретатор "видит" три пространства имен: локальное, глобальное и встроенное. Пространство имен - отображение из имен в объекты.
Для понимания того, как Python находит значение некоторой переменной, необходимо ввести понятие блока кода. В Python блоком кода является то, что исполняется как единое целое, например, тело определения функции, класса или модуля.
Локальные имена - имена, которым присвоено значение в данном блоке кода. Глобальные имена - имена, определяемые на уровне блока кода определения модуля или те, которые явно заданы в операторе global. Встроенные имена - имена из специального словаря __ builtins __.
Достарыңызбен бөлісу: |