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 справа від операції присвоювання. У цьому тимчасовому кортежі оригінальні значення a’ = 5, b’ = 7;
  • імені a присвоюється значення b’ з тимчасового кортежу. Тобто a = b’ = 7;
  • імені b присвоюється значення a’ з тимчасового кортежу. Тобто b = a’ = 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 є можливість отримати зріз. Більш детально про зрізи описується в іншій темі.

 


Зв’язані теми