#40. Операторы * и ** для упаковки и распаковки коллекций | Python для начинающих

preview_player
Показать описание
Подробно объясняется как работают операторы * и ** для упаковки и распаковки произвольных итерируемых объектов.

Рекомендации по теме
Комментарии
Автор

спасибо за прекрасный урок!
все просто и понятно, сколько всего пересмотрела, никак не могла понять эти * и **, а тепер паззл сложился

supervichka
Автор

спасибо, хорошие уроки. Нашёл Ваш канал по урокам по фласку и остался тут насовсем ))

vladtkachenko
Автор

Сергей, спасибо вам за ваши уроки! Как всегда - прекрасное объяснение!

denistalko
Автор

Офигеть что творится Спасибо ОГРОМНОЕ!!!

СергейОсадчий-ие
Автор

Сергей, спасибо. Добавлю можно создавать список из кортежа чуть по другому синтаксису(без звездочки перед range):
d = 5, 10
print(list(range(*d)))
#[5, 6, 7, 8, 9]

ДмитрийКрашенинников-гш
Автор

3:04 А вот так можно:
(*x, ) = 1, 2, 3 # x=[1, 2, 3]
*x, = 1, 2, 3 # x = [1, 2, 3]
[*x, ] = 1, 2, 3 # x= [1, 2, 3]
Но нельзя упаковать во множество (порядок элементов во множестве не задан, поэтому позиционное сопоставление не имеет смысла).
{*x, } = 1, 2, 3 # SyntaxError: cannot assign to set display
Хотя преобразовать список или кортеж во множество можно:
x = set((1, 2, 3))
x = set([1, 2, 3])

olegkomlev
Автор

Ах вот как их ещё можно использовать...

андрейхоменко-ия
Автор

Спасибо, Сергей, слов нет. Какая у Вас основная профессия?

friendcat
Автор

А почему при передаче аргументов в *args, args - это кортеж, а при передаче в *x, y = 1, 2, 3, 4. X - это уже не кортеж, а список?

АлексейАлексеев-цхт
Автор

2:53 "Мы не можем упаковать уже упакованный кортеж". Посмотрел в PEP стандарт и все таки распаковка и последующая упаковка в данном случае возможна. Нужно применить вот такой синтаксис *x, = 1, 2, 3 или [*x] = 1, 2, 3
Собственно это ошибка и указывается в данном случае как синтаксическая: SyntaxError: starred assignment target must be in a list or tuple

podgorniy.r
Автор

1:20 интересно, а почему кортеж упаковывается именно в список, а не в новый кортеж?

podgorniy.r
Автор

А есть тоже самое (весь плейлист) но в тексте или книге?

vbru
Автор

Почему распаковка словаря в словарь работает, допустим
d = {'a':1, 'b':2}
{**d} - это работает без проблем,
{a=1, b=1} - но так уже не работает, ведь **d это по сути то же самое что a=1, b=2 ?
{**d} должно быть эквивалентно {a=1, b=1}, почему нет?

eugenedukatta
Автор

Если a=[1, 2, 3] или a=[1, 2, 3] или a={1, 2, 3} то попытка распаковать:
(*a) # ошибка, запятой нет, поэтому скобки не задают кортеж, а просто обычные скобки в выражении, т.е это просто *a - бессмысленное выражение
(*a, ) # (1, 2, 3) Запятая означает, что нужно распаковать для создания кортежа
[*a] # [1, 2, 3] Скобки [ ] означают, что нужно распаковать для создания списка
{*a} # {1, 2, 3} Скобки { } означают, что нужно распаковать для создания множества

olegkomlev
Автор

Почему распаковка работает только при добавлении запятой? Например, tup = (*lst) не сработает, а tup = (*lst, ) сработает

ThevideOoLoadeR