Кортежі в PYTHON.

Опубликовано kybik - вт, 12/05/2017 - 15:48

Списки добре підходять для зберігання наборів елементів, які можуть змінюватися протягом життєвого циклу програми. Наприклад, можливість модифікації списків життєво необхідна при роботі зі списками користувачів сайту або списками персонажів гри. Однак в деяких ситуаціях потрібно створити список елементів, який не може змінюватися. Кортежі (tuples) надають саме таку можливість. У мові Python значення, які не можуть змінюватися, називаються незмінними (immutable), а незмінний список називається кортежем.

Визначення кортежу.

Кортеж виглядає як список, не рахуючи того, що замість квадратних дужок використовуються круглі дужки. Після визначення кортежу ви можете звертатися до його окремих елементах за індексами точно так само, як це робиться при роботі зі списком. Припустимо, є прямокутник, який в програмі завжди повинен мати строго певні розміри. Щоб гарантувати незмінність розмірів, можна об'єднати розміри в кортеж:

 

.1. dimensions = (200, 50)
.2. print(dimensions[0])
print(dimensions [1])

У точці .1. визначається кортеж dimensions, при цьому замість квадратних дужок використовуються круглі. У точці .2. кожен елемент кортежу виводиться окремо з використанням того ж синтаксису, який використовувався для звернення до елемента списку:

 

200
50

Подивимося, що станеться при спробі змінити один з елементів в кортежі dimensions:

dimensions = (200, 50)
.1. dimensions[0] = 250

Код в точці .1. намагається змінити перше значення, але Python повертає помилку типу. По суті, так як ми намагаємося змінити кортеж, а ця операція є неприпустимою для об'єктів цього типу, Python повідомляє про неможливість присвоєння нового значення елементу в кортежі:

 

Traceback (most recent call last):
File "dimensions.py", line 3, in <module>
dimensions [0] = 250
TypeError: 'tuple' object does not support item assignment

І це добре, тому що ми хочемо, щоб Python повідомляв про спробу зміни розмірів прямокутника в програмі, видаючи повідомлення про помилку.

Перебір всіх значень в кортежі.

Для перебору всіх значень в кортежі використовується цикл for, як і при роботі зі списками:

 

dimensions = (200, 50)
for dimension in dimensions:
print(dimension)

Python повертає всі елементи кортежу по аналогії з тим, як це робиться зі списком:

 

200
50

Заміна кортежу.

Елементи кортежу не можуть змінюватися, але ви можете присвоїти нове значення змінній, в якій зберігається кортеж. Таким чином, для зміни розмірів прямокутника слід перевизначити весь кортеж:

 

.1. dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
    print(dimension)
.2. dimensions = (400, 100)
.3. print("\n Modified dimensions:")
for dimension in dimensions:
    print(dimension)

Блок в точці .1. визначає вихідний кортеж і виводить вихідні розміри. У точці .2. в змінній dimensions зберігається новий кортеж, після чого в точці .3. виводяться нові розміри. На цей раз Python не видає повідомлень про помилки,
тому що заміна значення змінної є допустимою операцією:

 

Original dimensions:
200
50
Modified dimensions:
400
100

У порівнянні зі списками структури даних кортежів відносно прості. Використовуйте їх для зберігання наборів значень, які не повинні змінюватися протягом життєвого циклу програми.