Тёмный

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

selfedu
Подписаться 159 тыс.
Просмотров 39 тыс.
50% 1

Обучающий курс: stepik.org/cou...
Подробно объясняется как работают операторы * и ** для упаковки и распаковки произвольных итерируемых объектов.
Telegram-канал: t.me/python_se...

Опубликовано:

 

26 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 60   
@supervichka7764
@supervichka7764 3 года назад
спасибо за прекрасный урок! все просто и понятно, сколько всего пересмотрела, никак не могла понять эти * и **, а тепер паззл сложился
@СергейОсадчий-и5е
@СергейОсадчий-и5е 7 месяцев назад
Офигеть что творится Спасибо ОГРОМНОЕ!!!
@denistalko6585
@denistalko6585 Год назад
Сергей, спасибо вам за ваши уроки! Как всегда - прекрасное объяснение!
@bakhtiyarov_dj
@bakhtiyarov_dj Год назад
Очень хорошо объясняешь. Благодарю!
@andredru4278
@andredru4278 7 месяцев назад
Спасибо. Полезно.
@ДмитрийКрашенинников-г7ш
Сергей, спасибо. Добавлю можно создавать список из кортежа чуть по другому синтаксису(без звездочки перед range): d = 5, 10 print(list(range(*d))) #[5, 6, 7, 8, 9]
@Paul-Olkov
@Paul-Olkov 8 месяцев назад
5:38 глянь, он говорил про это.
@illiukhin
@illiukhin 3 года назад
Спасибо
@vladtkachenko6822
@vladtkachenko6822 3 года назад
спасибо, хорошие уроки. Нашёл Ваш канал по урокам по фласку и остался тут насовсем ))
@vladmaltsev3238
@vladmaltsev3238 3 года назад
Та же история, только началось с Django )
@jamjam3337
@jamjam3337 Год назад
спасибо!
@olegkomlev
@olegkomlev 2 года назад
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])
@андрейхоменко-и5я
@андрейхоменко-и5я 3 года назад
Ах вот как их ещё можно использовать...
@ibrahimoglu
@ibrahimoglu 3 года назад
👍
@impellergimpeller5133
@impellergimpeller5133 3 года назад
👍👍👍👍👍
@АлексейАлексеев-ц8х9т
А почему при передаче аргументов в *args, args - это кортеж, а при передаче в *x, y = 1, 2, 3, 4. X - это уже не кортеж, а список?
@eugenedukatta9355
@eugenedukatta9355 11 месяцев назад
Потому-что в Питоне куча уродливых костылей. Несмотря на его циничный Дзен, первые 4 пункта: 1) Красивое лучше, чем уродливое. 2) Явное лучше, чем неявное. 3) Простое лучше, чем сложное. 4) Сложное лучше, чем запутанное Я когда начинал изучать Питон и прочитал Дзен, сразу воодушевился - ну наконец-то кто-то все костыли выгреб и создал то что все ждали. Потом ждало несколько разочарований, первое самое сильное - оператор присваивания и равенство = и == как в си. В какой-то версии появилось := с поведением как = в си, и это назвали развитие языка. Ага, Гвидо не знал про Паскаль и си. И еще: - кортеж из 1 элемента (1,) - запятая нужна! - множество задается в фигурных скобках, но пустое множество скобками не задать (надо set()), иначе получится пустой словарь , другие последовательности строку кортеж и список можно - генераторные выражения для списка и множества можно задавать своими скобками, а для кортежа надо tuple() - вот опять же звездочки по-разному в разных местах - почему присваивание *x = [1,2,3] нельзя? (в функции это можно а также можно y, *x) - зачем нужно двоеточие в функциях после заголовка? там же далее идет первый отступ? для однострочной функции? дак жестко задать тело функции с отступа и все! - pass для пустого тела функции и циклов - костыль потому-что нет скобок - кортеж можно задать в скобках, можно бех скобок, но не всегда - Зачем вообще нужен кортеж, это кастрированный по возможностям список. Ну экономит память и быстрее работает? Да плевать, Питон и так медлителен он же интерпретатор. Ну и что-то еще. Не, Питон в чем-то очень даже хорош, но от костылей блевать хочется.
@АлексейАлексеев-ц8х9т
@АлексейАлексеев-ц8х9т 11 месяцев назад
@@eugenedukatta9355 спасибо за ответ, интересно было почитать. Я, как начинающий, все эти вещи просто принимаю как данность, тк сравнить не с чем, но судя по тому что вы написали становится понятно, что всё могло быть лучше.
@olegkomlev
@olegkomlev 11 месяцев назад
@@eugenedukatta9355 Посмотрите на Оберон - язык программирования, завершающий (на данный момент) семейство языков Никлауса Вирта.
@lyubovs2242
@lyubovs2242 9 месяцев назад
@@eugenedukatta9355спасибо, многое стало понятнее в вашем конспекте нюансов😃👍
@friend1cat
@friend1cat 3 года назад
Спасибо, Сергей, слов нет. Какая у Вас основная профессия?
@selfedu_rus
@selfedu_rus 3 года назад
Программист, наверное ))
@ВикторЖигурда
@ВикторЖигурда 2 года назад
Композитор наверное был такой Балакирев прошу прощения имени не вспомнил. У вас что-то есть такое, что связано с классической музыкой. Извините если мои мнения не достоверны
@podgorniy.r
@podgorniy.r 2 года назад
1:20 интересно, а почему кортеж упаковывается именно в список, а не в новый кортеж?
@selfedu_rus
@selfedu_rus 2 года назад
все упаковывается в список, так решил основатель Python ))
@podgorniy.r
@podgorniy.r 2 года назад
@@selfedu_rus спасибо сэнсэй)
@eugenedukatta9355
@eugenedukatta9355 11 месяцев назад
@@selfedu_rus ага только аргументы функции упаковываются в кортеж. Умно! (тоже Гвидо так захотел, ну ему можно он ведь диктатор)
@olegkomlev
@olegkomlev 2 года назад
Если 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} Скобки { } означают ,что нужно распаковать для создания множества
@podgorniy.r
@podgorniy.r Год назад
Упаковка в любом случае происходит в список, а также упаковка во множество приведет к ошибке. Комментарий выше от Олега Комелева: "Однако упаковать во множество нельзя (порядок элементов во множестве не задан, поэтому позиционное сопоставление не имеет смысла)."
@olegkomlev
@olegkomlev Год назад
@@podgorniy.r Вот это и интересно: упаковывается всегда в список, хотя можно при упаковке указать [ ], а можно ( ,); а распаковать можно хоть в список, хоть в кортеж ,хоть во множество.
@podgorniy.r
@podgorniy.r Год назад
@@olegkomlev почему упаковка идет только в список ответа нет даже в документации. Думаю причина в том, что это самый подходящий тип данных для данного вида распаковки
@podgorniy.r
@podgorniy.r Год назад
@@olegkomlev сегодня читал, что этот вопрос обсуждался в одном из PEP стандартов, поэтому в будущем возможно данное поведение изменят)
@eugenedukatta9355
@eugenedukatta9355 11 месяцев назад
@@podgorniy.r Ага а что делать с написанными программами они под новый измененный интерпретатор не заработают как прежде?
@vb52ru
@vb52ru 2 года назад
А есть тоже самое (весь плейлист) но в тексте или книге?
@selfedu_rus
@selfedu_rus 2 года назад
Вот именно этот не делал.
@vb52ru
@vb52ru 2 года назад
не думали написать книгу по курсу?
@selfedu_rus
@selfedu_rus 2 года назад
@@vb52ru мне кажется смысла нет, да и времени тоже )
@аноним-х3ш
@аноним-х3ш 2 года назад
3:42
@аноним-х3ш
@аноним-х3ш 2 года назад
6:40
@ThevideOoLoadeR
@ThevideOoLoadeR 7 месяцев назад
Почему распаковка работает только при добавлении запятой? Например, tup = (*lst) не сработает, а tup = (*lst,) сработает
@selfedu_rus
@selfedu_rus 7 месяцев назад
(1) != (1, )
@ThevideOoLoadeR
@ThevideOoLoadeR 7 месяцев назад
@u_rus Прошу прощения, пока не совсем понял :) Можно подробнее? Я видимо не до конца осознаю ключевую роль запятой)
@ThevideOoLoadeR
@ThevideOoLoadeR 7 месяцев назад
Апдейт: теперь понял, что не знал элементарной вещи: скобки не являются причиной создания кортежей, вместо этого именно запятые указывают на их создание
@Jdjkjh
@Jdjkjh Год назад
Спасибо
@eugenedukatta9355
@eugenedukatta9355 11 месяцев назад
Почему распаковка словаря в словарь работает, допустим d = {'a':1, 'b':2} {**d} - это работает без проблем, {a=1, b=1} - но так уже не работает, ведь **d это по сути то же самое что a=1, b=2 ? {**d} должно быть эквивалентно {a=1, b=1}, почему нет?
@youknowwhatlol6628
@youknowwhatlol6628 5 месяцев назад
может, потому, что {a=1, b=1} - не словарь?))
@a.osethkin55
@a.osethkin55 2 года назад
Спасибо
@niktonikak1820
@niktonikak1820 Год назад
спасибо
@gayratsaidakhmedov5451
@gayratsaidakhmedov5451 9 месяцев назад
спасибо
@podgorniy.r
@podgorniy.r Год назад
2:53 "Мы не можем упаковать уже упакованный кортеж". Посмотрел в PEP стандарт и все таки распаковка и последующая упаковка в данном случае возможна. Нужно применить вот такой синтаксис *x, = 1, 2, 3 или [*x] = 1, 2, 3 Собственно это ошибка и указывается в данном случае как синтаксическая: SyntaxError: starred assignment target must be in a list or tuple
@selfedu_rus
@selfedu_rus Год назад
Здесь уже костыли получаются, т.к. вы по сути кортеж в кортеж записываете или кортеж в список.
Далее
+1000 Aura For This Save! 🥵
00:19
Просмотров 4,1 млн
Урок 50 Миксины
11:35
Просмотров 311