Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ 32 ] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

10.3.2 Присваивание

Присваивание (lvalue = expression) используется для того, чтобы связать идентификатор (существующий или новый) с объектом, для создания и изменения атрибутов объектов, изменения элементов изменяемых последовательностей, добавления и изменения записей в отображениях. Присваивание может производиться (выражения, которые могут быть использованы слева от знака равенства, обычно называют lvalue):

name = expression Идентификатору.

x.attribute = expression

Атрибуту. Обычно имя attribute в пространстве имен объекта x связывается с объектом, являющимся результатом вычисления выражения expression. Вы можете контролировать поведение при присваивании атрибуту экземпляра класса, определив для класса специальный метод setattr () .

x[ key] = expression

Элементу последовательности или отображения. Изменение элементов экземпляров классов реализуется специальным методом setitem () .

x[ slice list ] = expression

Подпоследовательности (синтаксис списка срезов slice list описан в разделе 10.2.2). Выражение expression должно быть последовательностью. Присваивание срезу экземпляра контролируется с помощью специального метода setslice () (если используется простая запись среза) или setitem () (если используется расширенная запись срезов).

lvalue, ... = expression

{lvalue, ... ) = expression

[lvalue, ... ] = expression

Конструкции, используемой для создания кортежей и списков (в том числе, произвольным образом вложенных) из всех перечисленных выражений. Операция присваивания выполняется путем распаковки последовательностей. Результат вычисления выражения expression должен быть последовательностью, содержащей

10.3.1 Инструкции-выражения

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

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



>>> o = c(1) >>> l = range(3)

>>> [(x, y), o.val] = [10, (xrange(2, 4), 5)]

>>> print x, y, l, o

2 3 [0, 10, 2] c(5)

Значение выражения справа от = (включая упаковку) вычисляется до того, как начинается присваивание. Таким образом, инструкция a, b = b, a обменивает значения переменных a и b. Однако следующий пример выведет [0, 2] :

x = [0, 1] i=0

i, x[i] = 1, 2

print x

Начиная с версии 2.0, возможно одновременное выполнение арифметической или битовой операции и присваивания:

lvalue += expression lvalue -= expression lvalue *= expression lvalue /= expression lvalue %= expression lvalue **= expression lvalue &= expression lvalue = expression lvalue = expression lvalue >>= expression lvalue <<= expression

Если lvalue является неизменяемым объектом, инструкция lvalue op= expression всегда эквивалентна последовательному применению оператора и присва-

такое же количество элементов, какое указано слева от знака равенства. Каждому вложенному списку слева в результате должна соответствовать подпоследовательность с таким же количеством элементов. При несоответствии количества элементов генерируется исключение ValueError. Приведем несколько примеров:

>>> x = range(1) >>> y, = range(1) >>> print x, y

[0] 0

>>> class c:

... def init (self, val):

... self.val = val

... def repr (self):

... return c(+self.val+)



10.3.3 Инструкция del

Семантика инструкции del lvalue во многом схожа с семантикой присваивания (синтаксис lvalue описан в разделе 10.3.2). Удаление идентификатора удаляет привязку имени (которое должно существовать) в локальном или глобальном пространстве имен (см. раздел 10.5) к объекту. При удалении атрибута обычно удаляется соответствующее имя из пространства имен объекта. Вы можете контролировать поведение при удалении атрибутов экземпляров, определив для класса специальный метод delattr () . Удаление элементов (записей) из экземпляров-последовательностей (экземпляров-отображений) реализуется специальным методом delitem () , подпоследовательности - специальным методом delslice () (если используется простая запись среза) или delitem () (при использовании расширенной записи срезов).

10.3.4 Пустая инструкция

Инструкция pass ничего не делает и может быть полезна там, где инструкция требуется синтаксисом, однако нет необходимости в выполнении каких либо действий, например:

# функция, которая ничего не делает def do nothing(arg): pass

# пустой класс class record: pass

10.3.5 Инструкция print

Инструкция print [expr list ] для каждого выражения в списке выражений expr list вычисляет его значение и выводит строковое представление значения выражения на стандартный поток вывода, разделяя их пробелами (необходимость вывода пробела контролируется атрибутом softspace файлового объекта). Строковое представление получается аналогично тому, как это делает встроенная функция str() (см. раздел 12).

Если список выражений не заканчивается запятой, в конце выводится символ перехода на новую строку. Это единственное действие, которое выполняется, если ин-

иванию результата (нового объекта) lvalue ( lvalue = lvalue op expression ). Здесь, в отличие от обычного присваивания, lvalue не может быть кортежем.

Заметим, что формально присваивание в языке Python не является оператором, то есть, не возвращает значения и не может быть использовано в выражениях. Так сделано, например, чтобы избежать ошибочного использования = вместо == в инструкции if .



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ 32 ] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145