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 есть возможность получить срез. Более подробно о срезах описывается в другой теме.

 


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