Python. Оператор присваивания. Формы присваивания. Примеры. Позиционное присваивание кортежей, списков

Оператор присваивания. Формы присваивания. Примеры. Позиционное присваивание кортежей, списков


Содержание



1. Назначение оператора присваивания

Оператор присваивания предназначен для связывания имен со значениями и для изменения атрибутов или элементов изменяемых объектов. Оператор присваивания связывает переменную с   объектом и набором (списком) объектов. Оператор присваивания обозначается ‘=’.

 

2. Какие существуют формы инструкции присваивания? Примеры

В языке Python существуют следующие формы (разновидности) инструкции присваивания:

  • обычная (каноническая) форма. Эта форма связывает одну переменную (один элемент данных) с одним объектом;
  • позиционное присваивание кортежей. В этом случае в левой части присваивания указывается несколько переменных (элементов данных), которые соответствуют такому же количеству объектов в правой части. Значения (объекты) в правой части присваиваются именам (переменным) в левой части, которые размещаются на одних и тех же позициях;
  • позиционное присваивание списков. Работает по принципу позиционного присваивания кортежей, но реализовано для списков;
  • позиционное присваивание последовательностей. В этом случае последовательность находится справа от знака присваивания. Эта последовательность разбивается на подэлементы, каждый из которых присваивается соответствующему имени, указываемому в левой части оператора присваивания;
  • присваивание с использованием операции распаковки *;
  • присваивание одинарного объекта группе имен;
  • комбинированное присваивание. В этом случае используются операторы +=, -=, *=, /=, //=, %=, &=, |=, =, >>=, <<=, **=.

 

3. Присваивание одиночных объектов. Общая форма. Примеры

Если оператор присваивания используется для одиночных объектов, то его общая форма имеет вид:

name = value

где

  • name – имя (переменная), которое нужно связать со значением (объектом) value;
  • value – значение, присваиваемое имени name, которое может быть выражением, одиночным значением или списком.

Также допускается в одной строке выполнять несколько присваиваний одиночным объектам. В этом случае операции присваивания разделяются символом ;.

Примеры.

>>> a=5 # каноническая форма
>>> b=7; c=8; d=9 # каноническая форма, разделение знаком ;
>>> b
7
>>> a
5
>>>
>>> T = [1,2,4] # присваивание списка
>>> T
[1, 2, 4]
>>>

В вышеприведенном примере переменная a связывается с объектом 5. Также переменные b, c, d получают значения соответственно 7, 8, 9. Имя T связывается со списком [1, 2, 4].

 

4. Позиционное присваивание кортежей и списков. Общая форма. Принцип выполнения позиционного присваивания

В простейшем случае общая форма позиционного оператора присваивания кортежей имеет вид:

name1, name2, ..., nameN = value1, value2, ..., valueN

где

  • name1, name2, nameN – имена (переменные) которые нужно связать с объектами (значениями) value1, value2, valueN;
  • value1, value2, valueN – значения (объекты), которые связываются с именами name1, name2, nameN.

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

После присваивания значения первому имени, это имя уже имеет новое значение при присваивании значения второму имени. Это есть важно. В нижеследующих примерах будет продемонстрирована особенность операции присваивания для нескольких объектов.

 

5. Примеры использования оператора присваивания для нескольких имен

Пример 1. В нижеследующем коде демонстрируется присваивание значений нескольким объектам.

>>> x=[0,1,2,3]
>>> i=0
>>> i,x[i]=2,6
>>> x
[0, 1, 6, 3]
>>>

В вышеприведенном примере при присваивании, строка

>>> i,x[i]=2,6

благодаря рекурсивному вызову последовательно формируется в две строки

i=2
x[i]=6 # x[2]=6

поэтому, в результате список-объект x будет иметь значение

[0, 1, 6, 3]

 

6. Позиционное присваивание последовательностей символов. Пример

Оператор присваивания можно применять для присваивания последовательностей символов. Среди нескольких имен, символ в правой части присваивается имени, позиция которого в левой части совпадает с позицией этого символа.

>>> x,y,z,w = 'abcd'
>>> x
'a'
>>> y
'b'
>>> z
'c'
>>> w
'd'
>>>

 

7. Примеры позиционного присваивания кортежей для обмена их значениями

Пример 1.

В этом примере осуществляется обмен значениями двух кортежей:

>>> a,b = 5,7 # позиционное присваивание кортежей
>>> a,b
(5, 7)
>>> a,b = b,a # обмен значениями
>>> a,b
(7, 5)
>>>

В данном примере строка присваивания кортежей

>>> a,b = b,a

работает следующим образом:

  • сначала создается временный кортеж, который запоминает оригинальные значения a, b справа от операции присваивания. В этом временном кортеже оригинальные значения а’ = 5, b’ = 7;
  • имени a присваивается значение b’ из временного кортежа. То есть a = b’ = 7;
  • имени b присваивается значение а’ из временного кортежа. То есть b = а’ = 5.

Итак, для обмена значениями в Python, не нужно использовать временные переменные для запоминания значений.

Пример 2.

>>> a,b,c,d = (1,2,3,4) # присваивание значений именам
>>> (a,b,c,d)
(1, 2, 3, 4)
>>> a,b,c,d = d,c,b,a # a = d; b = c; c = b; d = a
>>> a,b,c,d
(4, 3, 2, 1)

В данном примере в строке

>>> a,b,c,d = d,c,b,a

интерпретатор выполняет следующую последовательность действий:

  • создается временный кортеж, в котором имена имеют следующие значения: a=1, b=2, c=3, d=4;
  • имя a получает значение d из временного кортежа: a = 4;
  • имя b получает значение c из временного кортежа: b = 3;
  • имя c получает значение b из временного кортежа. Таким образом c = 2;
  • имя d получает значение a из временного кортежа. Ведь d = 1.

 

8. Позиционное присваивание списков. Пример

Переменные могут формироваться в списки. Присваивание в списках может быть следующим:

>>> [X,Y,Z] = [5,10,15] # позиционное присваивание списков
>>> [X,Y,Z]
[5, 10, 15]
>>> X
5
>>> Y,Z
(10, 15)
>>> [Y,Z] # представить как список
[10, 15]
>>> (X,Y,Z) # представить как кортеж
(5, 10, 15)
>>>

 

9. Пример присваивания между кортежами и списками

В Python списки и кортежи являются обобщенными. Это значит, что можно присваивать список переменных кортежу и, наоборот, кортеж пеменным списка. В любом случае интерпретатор свяжет элементы последовательности справа с переменными в последовательности слева соответственно их позициям в направления слева направо:

>>> [x, y, z] = (5, 10, 15) # кортеж значений присваивается списку переменных
>>> x,y,z
(5, 10, 15)
>>> (i,j,k) = [100, 200, 300] # список значений присваивается кортежу
>>> i,j,k
(100, 200, 300)
>>> (a,b,c,d) = "INFO" # строка символов присваивается кортежу
>>> a,b,c,d
('I', 'N', 'F', 'O')
>>> a,d
('I', 'O')
>>>

 

10. Какие ограничения устанавливаются при присваивании последовательностей?

При присваивании последовательностей важно, чтобы обе последовательности имели одинаковое количество элементов. Если количество элементов в последовательностях будет отличаться, то интерпретатор выдаст сообщение об ошибке.

Например.

>>> text = "ABCD"
>>> x,y,z = text # количество элементов не совпадает
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
x,y,z = text
ValueError: too many values to unpack (expected 3)
>>>

Если нужно присвоить разное количество элементов, то в Python есть возможность получить срез. Более подробно о срезах описывается в другой теме.

 


Связанные темы