Красивый Питон — часть 3. Распаковка в Python.

Перед вами очередная статья об идиомах Python. Этот пост расскажет о такой штуке, как распаковка в Python. Другими словами, о разделении последовательностей (списков, кортежей) в другие переменные. Для этих нужд есть удобные и элегантные методы использования.

Как производится распаковка в Python?

распаковка последовательностей в pythonРаспаковка работает с различными типами последовательностей, и выделят содержимое последовательности в другие элементы. В Питоне есть несколько типов последовательности, для которых определено множество встроенных функций. Один из типов последовательности в Python — списки.

Распаковка последовательностей в Python

Сначала посмотрим на базовый прием распаковки. Синтаксис очень простой и интуитивно понятный:

#Как распаковать?
user = [0, 180, 75]
user_id, height, weight = user
name = ("Jamal", "Moir")
f_name, l_name = name

Как видите, все что нужно сделать — это указать переменные, которым будут присвоены элементы последовательности. Имейте ввиду, что для этого нужно знать, сколько элементов содержится в той или иной последовательности.

Перестановка переменных Python

Это маленький бриллиант в Питоне. Однажды вам понадобиться поменять местами переменные — обязательно используйте эту идиому!

#Не переставляйте переменные так:
temp = a
a = b
b = temp

#Используйте такую штуку!
a, b = b, a

Добавить здесь больше нечего. Просто, легко, блестяще.

Распаковка с enumerate() в Python

Нечто подобное уже было в посте про циклы, но пожалуй стоит отметить эту идиому еще раз, теперь в контексте распаковки.

#Распаковка с использованием enumerate()
for i, val in enumerate(primes, 1):
  print("{prime} is prime number {n}.".format(prime=val, n=i))

Как было рассказано ранее, enumerate создает кортеж размером 2. В примере выше распаковка использована для доступа к отдельным частям созданного кортежа — это позволило использовать удобочитаемые имена в пределах цикла.

Расширенные возможности распаковки в Python

Новое в Python 3 — «расширенная распаковка». Это дополнение, которое позволяет указать переменную, которая будет иметь список значений и распаковать последовательность в нее. В коде ниже содержание переменных показано в комментарии после строки кода.

#Как использовать расширенную распаковку
a, *b, c = range(10) #a = 0, b = [1, 2, 3, 4, 5, 6, 7, 8], c = 9
d, *e = range(10) #d = 0, e = [1, 2, 3, 4, 5, 6, 7, 8, 9]

Переменная, перед которой стоит звездочка будет содержать список, если распаковываемых значений больше, чем указано переменных. Это позволяет вам распаковать последовательности, длина которых заранее неизвестна.

Использование анонимных переменных при распаковке

Если нужно распаковать последовательность, но при этом не использовать все значения — используйте одноразовую переменную.

#временная переменная
user = ["Breaking", "Coder", "07778889999"]
f_name, __, phone_no = user
print("Hello {name}, your phone number is {no}.".format(name=f_name, no=phone_no))

В примере выше используется двойное подчеркивание. Одинарное тоже можно использовать, ну при этом могут возникать проблемы. Так что лучше не рисковать.

 

Надеюсь, вы узнали в этой статье что-то новое для себя. От себя могу сказать лишь, что знакомство с идиомами Python приносит все больше удовольствия от программирования.
Спасибо Jamal Moir за замечательные советы.