#python
Розпакування - то одна з найцікавіших "фішок" мови Python.
Якщо у вас є tuple - то можна звичайно отримати доступ до елементів через індекс:
p = (4, 5)
first = p[0]
second = p[1]
Але можна - "розпакувати" tuple одразу в дві змінні
unpacked_first, unpacked_second = p
Можна розпаковувати більш складні структури:
data = ['ACME', 50, 91.1, (2024, 06, 18)]
name, shares, price, date = data
* дозволяє вказати - "а все інше запиши сюди 😁". Наприклад тут - в phone_numbersrecord = ('Alex', 'alex@example.com', '123-456-7890', '124-456-0000')
name, email, *phone_numbers = recordПодібним чином можна розбирати строки (якщо ви точно впевнені в їх структурі):
line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'
uname, *fields, homedir, sh = line.split(':')
_ дозволяє вказати, що ця частина даних несуттєва. Наприклад, отримати тільки імʼя та рік:record = ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = recordЗ пакуванням звʼязаний відома задачка про те, як поміняти дві змінні місцями
a = 1
b = 2
a, b = b, a
Також, за допомогою рекурсії та розпакування можна писати такі функції
def sum(items):
head, *tail = items
return head + sum(tail) if tail else head
Як завжди - результати виконання кожного фрагменту:
first: 4, second: 5
unpacked_first: 4, unpacked_second: 5
name: ACME, shares: 50, price: 91.1, date: (2012, 12, 21)
name: Alex, email: alex@example.com, phone_numbers: ['123-456-7890', '124-456-0000']
uname: nobody, homedir: /var/empty, sh: /usr/bin/false
name: ACME, year: 2012
a: 2, b: 1
sum([1, 2, 3, 4, 5]) = 15
Весь код - тут.