Почему я не могу этого сделать:
d = [x for x in range(7)]
a, b, c, d, e, f, g = *d
Где можно распаковать? Только между скобками функции?
Вы неправильно используете Extended Iterable Unpacking
.
d = [x for x in range(7)]
a, b, c, d, e, f, g = d
print(a, b, c, d, e, f, g)
Where it's possible to unpack? Only between parentheses of a function?
Нет,
*
предлагает изменить синтаксис итеративной распаковки, позволяя указать «универсальное» имя, которому будет назначен список всех элементов, не присвоенных «обычному» имени.
Вы можете попробовать что-то вроде этого:
a, *params = d
print(params)
Выход
[1, 2, 3, 4, 5, 6]
Обычно оператор *
(Расширенная итерируемая распаковка) используется, когда вам нужно передать параметры функции.
Примечание
Javascript-эквивалент Расширенная итерируемая распаковкаoperator
называется синтаксис распространения.
d = [...Array(7).keys()]
console.info(d)
var [a, ...b] = d
console.info(a,b)
t будет содержать значение для первого элемента d
, а остальные значения будут упакованы в переменную rest
.
Упакованный процесс будет производиться в левой части задания.
но после печати 't' я получаю все значения, а не только первое: (1, 2, 3), rest = [2, 3] t = 1, * rest print (t)
Кажется, вам не нужен *
>>> z = [x for x in range(7)]
>>> a,b,c,d,e,f,g = z
>>> a
0
>>> b
1
>>> c
2
>>>
(Я использовал z, а не d дважды.)
Да, вы правы, я не заметил эту двойную букву «d».
Н.П. Двойная буква d - не причина неудачной распаковки. Также вам на самом деле не нужна вспомогательная переменная: a,b,c,d,e,f,g = range(7)
работает, потому что распаковка работает с итерациями.
Да, я понимаю, но двойное использование одного и того же идентификатора - не лучшая практика.
Вы также можете использовать это:
>>> a,b,c,d,e,f,g = range(7)
>>> a
0
>>> b
1
>>> c
2
извините мое плохое, диапазон должен быть (7). этот будет работать: a, b, c, d, e, f, g = range (7)
Я позабочусь об этом, спасибо за руководство @ PM2Ring
Итак, почему это правильно: t = 1, * rest, а это не: t = * rest? Первый всегда автоматически создает кортеж?