Тёмный

12 красивых ОДНОСТРОЧНЫХ конструкций на Python - сделай свой код конфеткой! 

Диджитализируй!
Подписаться 162 тыс.
Просмотров 224 тыс.
50% 1

Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Сказать спасибо за это видео можно здесь - boosty.to/digitalize.team
Python - язык лаконичный, его любят за выразительность и читаемый код. Изучи эти 12 однострочных конструкций Python и применяй их в своих проектах, сделай код конфеткой!
PDF шпаргалка, которую можно распечатать и держать перед глазами: to.digital/s/12-python-onelin... - цветная версия
to.digital/s/12-python-onelin... - чёрно-белая версия
0:00 - Введение
0:54 - 1. Распаковка
3:00 - 2. map вместо цикла
5:20 - 3. reduce вместо цикла
8:58 - 4. Comprehensions вместо цикла
11:34 - 5. filter вместо цикла или comprehensions
14:36 - 6. Быстрое копирование списка
17:07 - 7. Обратить список
18:03 - 8. in вместо if
19:55 - 9. all вместо сложного if
21:53 - 10. any вместо сложного if
22:37 - 11. Тернарный оператор вместо многострочного кода
24:20 - 12. Конфигурирование
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
Telegram канал - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...

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

 

2 июн 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 668   
@t0digital
@t0digital 2 года назад
Подготовили PDF шпаргалку, которую можно распечатать и держать перед глазами, чтобы быстрее всё запомнить: to.digital/s/12-python-oneliners.pdf - цветная версия to.digital/s/12-python-oneliners-wb.pdf - чёрно-белая версия Мой курс «Хардкорная веб-разработка» - course.to.digital Вжух!
@salmanchik1
@salmanchik1 Год назад
19:28 Чувак, ударение в слове красивее поставил слегка неправильно. А так очень познавательный выпуск.
@indravishnu2387
@indravishnu2387 Год назад
Красавчик ! но шпаргалка в формате txt честно не хватает )) !!!!
@jornand123
@jornand123 2 года назад
Относительно .split есть неточность: split() и split(" ") - не одно и то же. split() для разделения использует не только пробел, но и все whitespace символы, например, таб, а также последовательность таких символов рассматривается как один - сплитятся слова независимо от кол-ва пробелов между ними. split(" ") сплитит строго по одиночным пробелам
@Pafel0684
@Pafel0684 Год назад
Результат то одинаковый?
@user-dd1di2fv6i
@user-dd1di2fv6i Год назад
@@Pafel0684 нет )
@frand2158
@frand2158 Год назад
Насчёт множественных пробелов: split(' ') делает также
@ivanivanovich975
@ivanivanovich975 Год назад
@@frand2158 нет
@barbosspirat
@barbosspirat 7 месяцев назад
​@@Pafel0684пример: "товар\tяблоко".split() = [товар, яблоко] та же строчка только теперь с split(" "), мы получим [товар\tяблоко]
@flashxl555
@flashxl555 2 года назад
Нужно добавить, что копирование вида L2 = L[:] является поверхностным копированием, а не полным. Это значит, что если есть вложенные в список структуры, например: ещё один список или словарь - то могу возникнуть проблемы. В таких случаях нужно использовать функцию deepcopy из модуля copy.
@coppolos
@coppolos 2 года назад
мало того, такая штука будет корректно работать только с объектами которые поддерживают срезы
@user-om9sf3fi6u
@user-om9sf3fi6u 2 года назад
Полезный коммент. В питоне много шансов при обучении упустить историю с глубоким и поверхностным копированием.
@valarg5756
@valarg5756 2 года назад
Полностью согласен, тоже смотрел об этом подумал
@AJIagguH
@AJIagguH 2 года назад
а если вызвать метод copy() ?
@flashxl555
@flashxl555 2 года назад
@@AJIagguH Если взять L.copy() - это будет эквивалентно L[:]
@sergepodkolzin1004
@sergepodkolzin1004 2 года назад
Не, ну когда reduce добавили с лямбдой, уже усложнено для восприятия, лучше отдельной строкой это делать. Явное лучше неявного или как там в дзене...
@user-sl5lc8xx4q
@user-sl5lc8xx4q 2 года назад
Да для многих многосторонность читабельнее нежели вот то. Но не знаю, я как человек который боролся, в процессе обучения, за лучшие решения в Кодварс могу сказать этот код выглядит элегантным :)
@doltramir
@doltramir 2 года назад
Вместо лямбды с reduce: from math import prod volume = prod(map(int, input().strip().split()))
@ssatskov
@ssatskov 2 года назад
Крутое видео, подача как всегда на уровне! НО Думаю, нужно было бы добавить про: 1. * в разделе про распаковку 2. copy, deepcopy 3. прекрасное нововведение py3.8 - walrus operator 4. _ в роли улучшения читаемости кода, когда значение не нужно, т.е.: for _ in range(10): pass 5. _ в роли разделителя для больших чисел: for _ in range(1_000_000): pass *ну а вообще в таких случаях лучше писать 10**6 Спасибо за то, что ты делаешь Один из немногих качественных каналов в ру сегменте
@SemyonKalyakulin
@SemyonKalyakulin 2 года назад
py - python ?:)
@nataliepodgainova6582
@nataliepodgainova6582 Год назад
Спасибо мне было очень полезно, 3-5 вообще не знала
@shadowraze6928
@shadowraze6928 6 месяцев назад
еще можна 10e6, число после `e` - количество нулей
@astoscope
@astoscope 2 года назад
Так то можно и целиком модули/скрипты/программы упихивать в одну строку, но имхо, читаемость кода значительно выше в большинстве случаев, когда кодер не поленился и написал в несколько строк каждое действие пошагово, а не запихнул миллион действий в одну строку, действия в которой выполняются теперь и не слева направо и не справа налево, а в порядке, индивидуальном для каждого случая. Что такое x * y * z понятно сразу, а редьюс от принципиально неименуемой функции и мапа с данными, которые хз какие они там придут вообще - это нифига без пузыря и не разберешься, нафига оно нужно тут
@bari_grey_woolf_6988
@bari_grey_woolf_6988 2 года назад
пиши машинный код, будет понятно
@pavelgushchin2223
@pavelgushchin2223 2 года назад
@HoroscopeVideo - Гороскоп на сегодня Единственный здравый комментарий. Без мата на его редьюс невозможно смотреть
@magomedmagomedov9168
@magomedmagomedov9168 2 года назад
Ну когда переменных 2-3 то конечно лучше не использовать reduce, но если их 30-40, то reduce смотрится уже привлекательнее
@reaexp
@reaexp 2 года назад
уроки Python бесплатно - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-TPFQkLlbs4o.html
@gauss_gun
@gauss_gun 2 года назад
Так цель видео в первую очередь обучить этим фичам, а не научить пихать всё в одну строку. Всегда полезно знать, как можно сделать, чтобы применить часть знаний в нужном месте правильно.
@alittlemoron4068
@alittlemoron4068 2 года назад
16:56 только что проверил данный код. На самом деле, это обычный аналог copy.copy функции, которая копирует не объект полностью, а лишь его структуру. Т.е. в случае, если ваш список будет многоуровневым (список в списке), то при изменении внутреннего списка, эти изменения отразятся и на скопированном списке. Так что если нужно железобетонно скопировать список как полностью новый объект, то лучше воспользоваться функцией из модуля copy deepcopy.
@Max-fr3xv
@Max-fr3xv 2 года назад
+
@PythonDevelopment
@PythonDevelopment 2 года назад
Ну это понятно и так. Не зря же deepcopy придумали. А срезы как быстрый и элегантный способ работы со списками, кортежами.
@ivanivanov-hl7ry
@ivanivanov-hl7ry 2 года назад
Первый пример: А можно ведь и без .strip() обойтись, так как без параметров он убирает только whitespaces, а .split() по умолчанию с краёв их тоже уберёт. Т.е. для решения этой же задачи можно просто input().split()
@grieverrr
@grieverrr 2 года назад
эта история работает только пробельного разделителя, если ты сплитнешь по запятой строку вида a = ", asd , ggg, rrrr , f, j" то пробелы с краев никуда не денутся. поэтому лучше сразу привыкать всегда делать стрип после сплита.
@kryzh_kit
@kryzh_kit 2 года назад
Хоть и всё изложенное использую, но с удовольствием посмотрел ролик, подача шикарная!)
@Hardy_21
@Hardy_21 4 месяца назад
Братан как же приятно тебя слушать, очень позитивный чувак. За пять лет от галер до крупных банков ни одного хорошего человека на сеньере не встретил. 90 процентов это пассивно-агрессивные, злые, но трусливые шавки нолайферы, которые в технологиях сами еле-еле разбираются. Братан, есть у тебя команда? Я бы с удовольствием поработал с тобой.
@vachapoluk9035
@vachapoluk9035 2 года назад
Очень спасибо за формат таких видео!!
@alexanderkramskoy7701
@alexanderkramskoy7701 Год назад
Очень доходчиво и познавательно! Спасибо!
@user-ey4qp4mq4q
@user-ey4qp4mq4q 2 года назад
Коротко, ясно, без воды 👍
@bernardsoul8936
@bernardsoul8936 Год назад
Очень полезное, а главное понятное видео, спасибо большое!
@user-sn1qp2xq8l
@user-sn1qp2xq8l 2 года назад
Cпасибо! Очень полезно и наглядно!
@helish_88
@helish_88 2 года назад
только сейчас понял как работает map, про reduce не знал, спс за видео, как всегда топ
@noookm
@noookm 2 года назад
Очень круто, очень полезно. Спасибо 👍 большое
@romanrrv
@romanrrv 2 года назад
Спасибо! Классный туториал получился!
@cbrnt4157
@cbrnt4157 2 года назад
Декларативный способ подстановки функции супер! Решил проблему, над который давно думал. Спасибо, Алексей!
@alexbokuto5353
@alexbokuto5353 2 года назад
Спасибо! Очень полезно и понятно!
@vitalik100500q
@vitalik100500q 2 года назад
В последнем примере можно сделать декоратор который будет генерировать айтемы в этом словаре и навесить его на функции обработчики, а так же дополнительно можно сделать функцию которая будет резолвить это, может быть удобно если структура более сложная, со вложенными словарями
@yariktyrykin3393
@yariktyrykin3393 2 года назад
Возможно стоило также рассказать помимо словарей конфигурации и о существовании ConfigParser'а, все-таки сохранять конфиги нужно также и в моменты "простаивания" программного продукта
@zaicevIT
@zaicevIT Год назад
Огромное спасибо за работу, очень полезный видос🤝
@nitproject5193
@nitproject5193 2 года назад
8:20 попався джсер)
@t0digital
@t0digital 2 года назад
да вот задолбали они, не могли хотя бы синтаксис комментариев во всех ЯП сделать однородным:)
@RuslanKovtun
@RuslanKovtun 2 года назад
@@t0digital так в питоне комменты как в bash, он ведь с ним конкурировал изначально.
@AlexandrSpb
@AlexandrSpb 3 месяца назад
Очень полезное видео, спасибо!
@igorratnik2357
@igorratnik2357 2 года назад
Спасибо Добрый человек. На степике прохожу 2 курс по пайтон поколение питон для продвинутых, на будущее присматриваю, чем продолжить. Увидел ваш курс. Добавил в закладочки. По строчным выражениям очень удобная штука, особенно циклы в них, в том числе вложенные.
@SamSafonov
@SamSafonov Год назад
Алексей, спасибо за видео!
@sevashpun
@sevashpun 2 года назад
Отличный урок! Респект!
@URich87UA
@URich87UA 2 года назад
супер, спасибо) очень познавательно)
@gatapov
@gatapov 2 года назад
Очень хорошая и понятная подача материала, спасибо! Можете сделать видео о Django signals?
@Vjidowkdkcpapqkfjfw
@Vjidowkdkcpapqkfjfw Месяц назад
Алексей, спасибо! Долго держал видео в закладках. В итоге, когда сейчас посмотрел, то всё уже знаю. Но, подача, как всегда, отличная. Спасибо ещё раз! Ждём новых подобных видео!
@t0digital
@t0digital Месяц назад
Спасибооо!
@Dmitriy777JF
@Dmitriy777JF 2 года назад
Спасибо за конфигурационный словарь!
@IgnatikVodichka
@IgnatikVodichka 2 года назад
Крутая рубрика. Оч крутая. Такого бы по чаще.
@vladimir_s1961
@vladimir_s1961 2 года назад
Из серии "хозяйке на заметку" - просто, легко, красиво. Приятно слушать человека, который знает, о чем говорит. Спасибо!
@Ruslantuber
@Ruslantuber 2 года назад
Супер полезно! №8 и №11 сразу забрал в свой скрипт. Знал, что как-то лаконичнее можно, но не знал как.
@sergv4782
@sergv4782 2 года назад
Спасибо, полезно)
@daryamachigina157
@daryamachigina157 Год назад
Как вы красиво все объясняете 😌😃
@user-if1dj7fy2y
@user-if1dj7fy2y Месяц назад
Чудесно звучит🎉❤ а Когда же будет продолжение этой темы разговора😊
@codelearner1713
@codelearner1713 2 года назад
Видео хорошее, но важно помнить, что коротко, не всегда красиво и читаем. И автор говорит об этом. Не забывайте про pep8
@alexeisafronov6627
@alexeisafronov6627 2 года назад
Классный урок! Круто было бы послушать про протоколы!
@reaexp
@reaexp 2 года назад
уроки Python бесплатно - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-TPFQkLlbs4o.html
@goodgriefwhatarelief8899
@goodgriefwhatarelief8899 2 года назад
Очень круто, спасибо
@iamzeus1250
@iamzeus1250 2 года назад
Спасибо большое!
@alexandrunknown1456
@alexandrunknown1456 2 года назад
Вот таких видосов бы больше
@user-hj6oh4bw3n
@user-hj6oh4bw3n 2 года назад
Вместо последнего пункта напрашивается создать Интерфейс Group, от которого будут наследоваться AdminGroup, ManagerGroup и т.д. Они будут по разному определять метод process_request.Тогда вместо стринга можно в конструктор User передать Request через интерфейс
@AntThinker
@AntThinker 2 года назад
16:20 Кажется мне, что list(numbers) более читаемо, чем нецелево использованный слайс. И с разворотом то же самое -- есть reversed(). А вообще норм!
@huseeads
@huseeads 2 года назад
Слайсы популярны и используются повсеместно, с их понимаем проблем возникнуть не должно
@Michael201078
@Michael201078 2 года назад
Мегаполезная подборка. Огромнейшее спасибо!
@alexandertomilov6165
@alexandertomilov6165 2 года назад
💯 ТОП!🔥 Сделай пожалуйста PDF: было/ стало, чтобы все могли скачать и было всегда перед глазами.
@t0digital
@t0digital 2 года назад
Отличная мысль, сделаем!
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov Год назад
Алексей, благодарю += 1000 !!
@michaelhin2290
@michaelhin2290 2 года назад
Спасибо большое, отличное видео! Если бы ещё по golang'у кто-то такое снимал
@nikitainiciative356
@nikitainiciative356 2 года назад
крутое видео, классно понимать, что о мапе я узнал раньше (вчера)
@maximshumilo3728
@maximshumilo3728 2 года назад
Все супер, в эффективности и читаемости не везде конечно соглашусь, но в целом большинство «приемчиков» достаточно хорошо упрощают читаемость кода. А будут ли какие-то более продвинутые темы?
@vladimirprin263
@vladimirprin263 Год назад
многое знал, но пару фишек утащу, спасибо)
@cryptoworkdonkey
@cryptoworkdonkey 2 года назад
Спасибо за хаки. Компрехеншны удобны. К обработке текста нужно привыкнуть. Например в R фильтрация идёт грепом: names = c('Хри', 'Аде', 'Тэя', 'Сте', 'Арх') grep("^А", names, value = TRUE) или конвейером: names %>% grep ("^А", ., value = TRUE) И в ифчиках/фильтрах есть булевый grepl(). Вот прям оч удобно.
@rinaatt
@rinaatt Год назад
Недавно вывел для себя такой однострочник. Допустим есть такая структура: dataset = [{'a': 1, 'b': 2}, {'a': 11, 'b': 12}, {'a': 21, 'b': 22}, {'a': 31, 'b': 32}] и например нужно взять `b`, где `a` == 21: b = next(item['b'] for item in dataset if item['a'] == 21)
@vladimirtalpa5390
@vladimirtalpa5390 2 года назад
Смотрю уже в середине ролика и думаю, надо бы написать, чтобы снял про замену if_else на dict_get - а в конце финальный аккорд как раз об этом. Молодец! Крутой мануал для джунов - ведь на собесех постоянно спрашивают об этих фишках. Такой же ролик стоит снять про: @staticmethod @classmethod @dataclass про использование абстрактных классов про синглтоны про конечные автоматы или машины состояний
@vladimirtalpa5390
@vladimirtalpa5390 2 года назад
а ещё очень крутая штука это @context. Ее как раз используют в машине состояний , но и не только
@MrPavelFrolov
@MrPavelFrolov 2 года назад
Спасибо за видео, хороший формат, давно искал такое. К сожалению, ничего нового для себя не увидел, хотелось бы чего то нового, может быть сложнее, или "спрятанного".
@eugene1079
@eugene1079 2 года назад
Спасибо, видео "пушка". А что за книга была на столе в этом видео?
@C0oo1D
@C0oo1D 2 года назад
Сразу зачесалось дополнить)) 3. читаемее mul вместо lambda, вообще лямбды стараюсь использовать по минимуму: from operator import mul volume = reduce(mul, map(int, input().strip().split()) 5. Вот функциональная часть в питоне порой подбешивает.. Хотел бы я написать вот так, но не выйдет: tuple(filter(str.startswith('A'), names)) Нужно дополнительно усложнять т.к. по простому объект не передать, а магию передачи уже забыл (есть что-то встроенное, но с ним выглядит насколько я помню хуже чем с лямбдой), потому часто проще и читаемее использовать comprehensions. 12. Смело как то) Я бы сделал так: def fallback(user, request): print(f'Not exists group provided: {user.group}') # logging.error is better group_to_process_method.get(user.group, fallback)(user, request)
@hinomuratomisaburo4901
@hinomuratomisaburo4901 2 года назад
ого крутой контент ! класс
@andruhaz
@andruhaz 2 года назад
Отличное видео, можно сделать серию таких?
@amigo4884
@amigo4884 2 года назад
Привет! Большое спасибо за видео. Не так давно ты говорил, что там, где требуется быстродействие код пишется на Go или на C/C++. У меня вопрос: чистый C жив в веб-разработке?
@t0digital
@t0digital 2 года назад
Привет! Не могу сказать про C/С++, так как не слежу за ними. Думаю, что какие-то хардкорные вещи под нагрузку пишутся на С или C++, но в будущем Rust их вытеснит в таких нишах.
@SantaCluster
@SantaCluster 2 года назад
интересно, а вытеснит ли Rust парочку C/C++ совсем? (для новых проектов, исключая имеющееся наследие)
@valarg5756
@valarg5756 2 года назад
В последнем примере с условиями думал нововведение switch и case сейчас покажешь,ан нет, на деле другое исполнение донес :) спасибо, не знал
@C0oo1D
@C0oo1D 2 года назад
Он же вроде в 3.10, а тут 3.9 =)
@user-ot5iy5es4l
@user-ot5iy5es4l 2 года назад
вообще не вижу какой то пользы от match, передаёшь функции объект, а далее кейсы перехватывают.Всё то же самое можно реализовать условиями.
@andreiosipov2766
@andreiosipov2766 2 года назад
@@user-ot5iy5es4l если у тебя более одного elif, то ты движешься куда-то не туда)
@user-ot5iy5es4l
@user-ot5iy5es4l 2 года назад
@@andreiosipov2766 это откуда ты такое взял что elif нельзя употреблять более раза?другое дело если else более раза
@andreiosipov2766
@andreiosipov2766 2 года назад
@@user-ot5iy5es4l ты профессиональный разработчик? Работаешь с другими людьми, проходишь код-ревью?
@viktorh71
@viktorh71 Год назад
Офигенно!
@ValeriyM_46
@ValeriyM_46 7 дней назад
это было афуенно!
@drdrdr6835
@drdrdr6835 2 года назад
То чувство что сначала сам решал задание а потом смотрел пример, почти все аналогично сделал🤔
@VikMoc
@VikMoc 2 года назад
Интересное видео, особенно для того, кто только знакомится с python
@ONYX_RU
@ONYX_RU 2 года назад
Я заговнокодил первый вариант без дополнительных библиотек и чисто в одну строку)): for num in [input().split() for x in range(1)]:print(int(num[0])*int(num[1])*int(num[2]))
@deve1oper
@deve1oper Год назад
Ну довольно простые приемы, все их я уже знал, кроме последнего, но там можно логически додуматься, хорошо зная питон, однако материал клевый, подача супер, все быстро, наглядно, с объяснениями, супер!
@Yarikorg
@Yarikorg 2 года назад
Хорошее видео, спасибо. Так глядишь, мне Пайтон зайдет и начну его использовать. Много от Перл там вижу. Не знаю что раньше появилось.
@clauseclause6640
@clauseclause6640 2 года назад
Сразу лайк =) ну и... вкусовщина конечно, но вместо lambda x, y: x * y можно использовать operator.mul а по последнему имхо наглядней Enum ну и можно через f-строку красиво сделать, например если это методы класса - getattr(self, f"process_{user.group}_request")(user, request)
@reaexp
@reaexp 2 года назад
уроки Python бесплатно - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-TPFQkLlbs4o.html
@user-bi8ed5gs1r
@user-bi8ed5gs1r Год назад
Спасибо!
@Namynnuz
@Namynnuz 2 года назад
Лямбды выглядят чуждо для семантики языка. В шарпее с LINQ с этим всем гораздо лучше: 6:58 int volume(string input) => input.Split(' ').Select(int.Parse).Aggregate((a, b) => a * b); 12:34 List filter(string[] input, string prefix) => input.Where(o => o.StartsWith(prefix)).ToList(); В случае с in это .Contains(), аналогичные .All() и .Any() так же имеются. При том, что это всё просто extension methods по IEnumerable.
@t0digital
@t0digital 2 года назад
Вопрос не по теме - а как вам картинка:)?
@i17talk8
@i17talk8 2 года назад
и звук ничо. Новая камера?
@vlightendy2539
@vlightendy2539 2 года назад
Wow 😍
@m_kovalenko
@m_kovalenko 2 года назад
Пожалуйста, делай отступы когда показываешь IDE. Из-за элементов интерфейса ютуба не видно код
@sw1881
@sw1881 2 года назад
круто все!
@t0digital
@t0digital 2 года назад
@@m_kovalenko отступы от краёв экрана, чтобы код не прилипал к краям экрана?
@mykolakudinov4403
@mykolakudinov4403 2 года назад
Конфигурационный словарь нужно будет согласовывать со списком типов пользователя. Этот вопрос будет решён если вместо строки использовать dataclass(name: str + process_request: Callable) как аргумент __init__ . В таком случае мы можем спрятать вызов process_request с user как аргумент внутри функции класса User.
@mykolakudinov4403
@mykolakudinov4403 2 года назад
Опять таки знаю об этом я только благодаря твои предыдущим роликам
@user-so6rz7bz1m
@user-so6rz7bz1m 6 месяцев назад
map принимает последовательность вторым аргументом, это ведь несовсем правда, map iterable принимает, это более широкий интерфейс, а sequence это более узкий интерфейс, он iterable (__iter__), sized(__len__) и container(__in__), iterable это может быть и генератор и сопрограмма (Coroutine) это я не поумничать пишу просто мне кажется важным различать ту самую утиную типизацию, где какой минимальный интерфейс необходим, ну и это помогает точно хинты писать, где что надо за материал, большое спасибо, очень полезно
@user-tl8gn9yg1b
@user-tl8gn9yg1b 2 года назад
24:20 - гораздо эффективнее в таких случаях прибегнуть к полиморфизму. Спасибо за видео!
@user-gb4cl5jv8l
@user-gb4cl5jv8l 2 года назад
Спасибо за ролик. В №12 что будет если группы пользователя нету в словаре?
@user-ir4vd5yk4x
@user-ir4vd5yk4x 2 года назад
Топовый видос спасибо
@alexsukhykh5666
@alexsukhykh5666 2 года назад
Спасибо за all, any. ))
@Monte_Cristo_R
@Monte_Cristo_R 2 года назад
Подскажите , почему цену на курс подняли с 20 до 30 ? Посчитали что цена низкая(конечно это дело автора , и я не с целью упрекнуть , но просто интересно откуда такое ценообразование и повышение на 1/3)? Получается примерно те первые 250-300 человек кто приобрёл курс успели и им повезло ? И значит ли это что в будущем цена ещё вырасти может и на сколько ?
@gustaugutter9477
@gustaugutter9477 2 года назад
*тидимс* И вот я оставил комментарий в поддержку отличного контента)
@RuslanKovtun
@RuslanKovtun 2 года назад
6:30 - `from operators import mul` и не надо лямбду писать, ну или `int.__mul__` но это больше текста и читабельность падает.
@user-bv4mh7xb2p
@user-bv4mh7xb2p 2 года назад
print('Василий' if 'Василий' in ('Христофор','Василий') else '') Таким образом можно сократить условие и вывод до одной строчки.Блок else в данном случае обязательный (тут он просто выведет пустую строку если нашего имени не обнаружилось в кортеже)
@furiousangel256
@furiousangel256 2 года назад
Такой код выглядит приятно для глаза и экономит место. Вот только читабельным он является только для того, кто знает эти фишки. Например, если бы я до этого видел увидел конструкцию [::-1] я бы во-первых не понял, что тут вообще происходит, а во-вторых засомневался бы - работает ли оно вообще? Спасибо за интересные фишки конечно, но я лучше потрачу 2-3 строчки кода и опишу последовательность действий в явном виде. Надеюсь мой неведомый потомок скажет мне спасибо :-)
@arsenmagomedov4936
@arsenmagomedov4936 2 года назад
тиринс, спасибо за материал)
@itkrasnodar956
@itkrasnodar956 2 года назад
17:34 ПОДСКАЖИТЕ, а чем плохи методы list.copy() и list.reverse() для копирования списка и переворачивания?
@t0digital
@t0digital 2 года назад
ничем не плохи
@itkrasnodar956
@itkrasnodar956 2 года назад
@@t0digital Спасибо за ответ, а в производительности работы программы, как считаете, какой метод будет лучше?
@t0digital
@t0digital 2 года назад
у меня нет такой информации в голове, но можете проверить - снять время до выполнения кода, после, проверить, что быстрее отрабатывает и насколько. Думаю, драматичной разницы не будет.
@alexenderius
@alexenderius 2 года назад
Предостережение автору. Упрощая, слово group произносится как /груп/. Если произносить /гроуп/, получается слово grope с совсем другим значением, возможно нежелательным в образовательном видео
@hunya_k
@hunya_k 2 года назад
А можно ли в первом случае сделать массив? Чтобы в неограниченные количестве «переменных» вписывать значения после сплита
@t0digital
@t0digital 2 года назад
вот так можно: some_tuple = input().strip().split() в some_tuple будет tuple=кортеж, не list. В видео/PDF там же распаковка кортежа просто показана в левой части. Если нужен именно list, то кортеж надо преобразовать явно в list: some_list = list(input().strip().split())
@hunya_k
@hunya_k 2 года назад
@@t0digital спасибо! Ваше видео вдохновило переписать код) (специально видео не искала, в рекомендациях попалось)
@user-iu6xg8wo8l
@user-iu6xg8wo8l 2 года назад
Думал, что все уже знаю, но узнал про any и all только сейчас, спасибо за видос
@kai.hexendorf
@kai.hexendorf Месяц назад
Так в нормальных языках люди смотрят в спецификацию коллекции и обнаруживают у неё все необходимые функциональные методы filter, map, all, every... А в python перевернули всё с ног на голову, и поэтому чтобы узнать о существовании глобальных методов all, any, должно снизойти свыше.
@user-qt4gz1dl6w
@user-qt4gz1dl6w 2 года назад
Было бы круто если ты бы сделал обзор всей библиотеки functools, там же не один метод reduce?
@sergiyr9152
@sergiyr9152 2 года назад
полезное видео!
@user-oe5ok3sj4q
@user-oe5ok3sj4q Год назад
К сплиту лепить стрип не надо, т.к. сплит уже убрал лишние пробелы. Такая конструкция может применяться в случае если мы в сплит передаем аргумент с конкретным разделителем. Срезы не изменяют список, т.е. конструкция список[::-1] просто возвращает список в обратном порядке, список при этом остался в первоначальном варианте. Для того чтобы развернуть список используется reverse().
@mrmedbedb1256
@mrmedbedb1256 Год назад
list comps, dict comp, gen exp это убойные инструменты питониста. В сочетании с тернарным оператором вообще на глушняк :)
@yt222ee
@yt222ee 2 года назад
так и знал что будет генератор списков, гениальная штука в питоне
@13danyocean13
@13danyocean13 2 года назад
О теме с конфигурацией: кроме простой и pythonic конструкции мы также получим сложность O(1), вместо O(n)(при реализации c кучей elif).
@reaexp
@reaexp 2 года назад
уроки Python бесплатно - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-TPFQkLlbs4o.html
@Darqsatyricon
@Darqsatyricon 2 года назад
Интересно псмотреть на покрытие юнит тестами при любви к однострочкам... И что-нибудь услышать про maintainability кода где в одну строку выполняется сразу несколько операций. Ты, наверное, сознательно опустил процесс валидации инпута в первом примере и любой еррор хендлинг. Вобщем, чёт я ожидал большего. Больше выглядит как студенческий код для фриланса нежели продакшн код с какого то нормального проекта или энтерпрайза.
@t0digital
@t0digital 2 года назад
Вот это - нечитаемо: numbers = map(int, input().split()) А вот так - песня: input_string = input() input_word = input.split() first_word = input_elements[0] second_word = input_elements[1] first_number = int(first_word) second_number = int(second_word) numbers = (first_number, second_number) Ну ок:)
@bulhi
@bulhi 2 года назад
Знаешь, спасибо тебе Когда-то давно я просто смотрел твои видосы, ничего не понимал Потом через время начал учиться жабускрипт, и спустя пол года устроился Сейчас, спустя 8 месяцев работы, являюсь мидл фулстак разрабом, с зп в 200 рублей Недавно увидел первый лям, и задумался с чего все начиналось и твой видос с реки попал, и все сошлось Спасибо!!
@bulhi
@bulhi 2 года назад
Update: плюс ко всему мне 19)
@vovchic3593
@vovchic3593 Год назад
С объёмом можно вообще так написать print(*[x*y*z for x, y, z in [map(int, input().split())]])
@iiepe1915
@iiepe1915 2 года назад
Когда программировал классы, нельзя было сделать через case?
@serhiiriznychenko4108
@serhiiriznychenko4108 2 года назад
Если кому интересно, вот как первая функция будет выглядеть на языке scala: input.trim.split(" ").map(_.toInt).product
Далее
skibidi toilet 74
07:02
Просмотров 21 млн
КОРОЧЕ ГОВОРЯ, 100 ДНЕЙ В СССР 3
8:45
skibidi toilet 74
07:02
Просмотров 21 млн