В канонической форме цель инструкции присваивания записывается слева от знака равно, а объект, который присваивается, – справа.
Цель слева может быть именем или компонентом объекта, а объектом справа может быть произвольное выражение, которое в результате дает объект.
В большинстве случаев присваивание выполняется достаточно просто, однако оно обладает следующими особенностями, которые следует иметь в виду:
• Инструкция присваивания создает ссылку на объект.
В языке Python инструкция присваивания сохраняет ссылки на объекты в переменных или в элементах структур данных. Они всегда создают ссылки на объекты и никогда не создают копии объектов.
Вследствие этого переменные в языке Python больше напоминают указатели, чем области хранения данных.
• Переменные создаются при первом присваивании.
Интерпретатор Python создает переменные, когда им впервые присваиваются значения (то есть ссылки на объекты), благодаря этому отсутствует необходимость предварительного объявления переменных. Иногда (но не всегда) в результате операции присваивания создаются элементы структур данных (например, элементы в словарях, некоторые атрибуты объектов). После выполнения операции присваивания всякий раз, когда имя переменной будет встречено в выражении, оно замещается объектом, на который ссылается эта переменная.
• Прежде чем переменную можно будет использовать, ей должно быть присвоено значение.
Нельзя использовать переменную, которой еще не было присвоено значение. В этом случае интерпретатор возбуждает исключение вместо того, чтобы вернуть какое-либо значение по умолчанию, – если бы он возвращал значение по умолчанию, это только осложнило бы поиск опе- чаток в программном коде.
• Некоторые инструкции неявно тоже выполняют операцию присваивания. В языке Python присваивание может выполняться в самых разных контексте Python. Например, импорт модуля, определение функции или класса, указание переменной в цикле for и передача аргументов функции неявно выполняют присваивание. Операция присваивания выполняется одинаково в любом месте, где бы она ни происходила, поэтому во всех этих контекстах просто выполняется связывание имен со ссылками на объекты.
Комментариев нет:
Отправить комментарий