Обычный способ простого присваивания значения переменной имеет следующий синтаксис:
name = expr object.attr_name = expr iterator[x] = expr iterator[start:stop:step] = expr
Когда выполняется операция присваивания значения, Python вычисляет выражение expr
, а затем связывает полученное значение с целевой ссылкой. Это связывание не зависит от типа значения. Python не проводит строгого различия между вызываемыми и невызываемыми объектами, как это принято делать в некоторых языках программирования, поэтому допускается связывать с переменными функции, методы, типы и другие вызываемые объекты точно так же, как числа, строки, списки и т.д. Это обусловлено тем, что функции и им подобные объекты являются объектами первого класса.
Детали связывания зависят от вида целевой ссылки. В качестве целевой ссылки в операции присвоения может выступать идентификатор, ссылка на атрибут, а также ссылка на индексированный элемент или срез.
Идентификатор:
Это имя переменной. Присваивание значения идентификатору связывает переменную с этим именем.
Ссылка на атрибут:
Записывается с использованием точечной нотации вида object.attr_name
, где object
- объект, а attr_name
- идентификатор, который служит именем атрибута объекта. Присваивание значения ссылке на атрибут запрашивает у объекта связывание атрибута.
Индексированный элемент:
Записывается с использованием скобочной нотации в виде iterator[x]
, где iterator
и x
- произвольные выражения. Присваивание значенияпо индексу запрашивает у контейнера объект связывания его элемента, указанного с помощью значения выражения, которое называют индексом или ключом элемента контейнера.
Срез:
Записывается в виде iterator[start:stop]
или iterator[start:stop:step]
, где iterator
, start
, stop
, step
- произвольные выражения. Каждое из выражений начало, конец и шаг является необязательным. Присваивание значения срезу запрашивает у контейнера объект связывания или открепления некоторых из его элементов. Присваивание значения срезу вида iterator[start:stop:step]
эквивалентно присваиванию значения с помощью индексирования вида iterator[sliсе(start,stop,step)].
Если целевой ссылкой операции присваивания является идентификатор, то оператор присваивания просто связывает значение с именем переменной. Эта операция никогда не отклоняется: если вы ее запрашиваете, она выполняется. Во всех остальных случаях инструкция присваивания определяет запрос к объекту на связывание одного или нескольких атрибутов или элементов объекта. Объект может отказатьв связывании или повторном связывании некоторых (или всех) атрибутов или элементов, бросается исключение, если данная операция запрещена.