«Использовать общее одноразовое имя переменной» - это ключ. *_
распаковывает (*
) в переменную с именем _
. Единственное, что делает _
«отбрасывающим», это то, что оно обычно игнорируется. Однако, если вы не проигнорируете это, это не будет броском!
Если вы хотите распаковать несколько частей и по-прежнему иметь доступ к ним по отдельности, используйте разные имена переменных. Ваш пример:
>>> record= ('ACME', 50, 123.45, (12, 18, 2012))
>>> name, *_, (*_, year) = record
>>> print(name,year,*_)
ACME 2012 12 18
назначает переменную _
дважды, поэтому назначенные позже данные 12,18
перезаписывают ранее назначенные данные 50,123.45
. Для сравнения рассмотрим:
>>> name, *_a, (*_b, year) = record
>>> print(*_a)
50 123.45 <-- the data you mentioned
>>> print(*_b)
12 18
В этом примере _a
и _b
- это отдельные переменные, которые содержат отдельное содержимое. Задание
name, *_a, (*_b, year) = record
точно так же, как
name, *extra1, (*extra2, year) = record
но с разными именами. Опять же, ничего о _
само по себе не является волшебным.