TGViewer
Test Engineering Notes Test Engineering Notes @testengineering · 4.01K subscribers
Post #559 1.5K
Магія пакування в Python

#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_numbers
record = ('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


Весь код - тут.
Gist Examples of unpacking in Python Examples of unpacking in Python. GitHub Gist: instantly share code, notes, and snippets.
  • ❤ 11
  • 👍 4
  • 🔥 3
More from @testengineering
  1. Oct 8, 2026🛠 Brownfield Agentic Engineering #ai Addy Osmani поділився думкою про те, як працювати з…
  2. Oct 6, 2026Вже жовтень - саме час готуватися до ISTQB CT-GenAI "До Нового Року є ще цілий квартал щоб…
  3. Oct 5, 2026Ministry of Testing - англомовні івенти на всі смаки #testing #ai Всім привіт. Хочу розпов…
  4. Sep 30, 2026Скіл, щоб прибрати зайве #ai Цікавий скіл, щоб не продиратись через купу згенерованого тек…
  5. Sep 29, 2026Що таке агент? #ai Зрозумій, на небесах в тестуванні тільки й говорять, що про море агенті…
  6. Sep 28, 2026Navigating the AI Shift #testing@testengineering #ai@testengineering Трохи старе, але не м…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →