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

  Переглядів 221,698

Диджитализируй!

Диджитализируй!

День тому

Мой курс «Хардкорная веб-разработка» - 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...

КОМЕНТАРІ: 657
@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 Рік тому
Относительно .split есть неточность: split() и split(" ") - не одно и то же. split() для разделения использует не только пробел, но и все whitespace символы, например, таб, а также последовательность таких символов рассматривается как один - сплитятся слова независимо от кол-ва пробелов между ними. split(" ") сплитит строго по одиночным пробелам
@Pafel0684
@Pafel0684 Рік тому
Результат то одинаковый?
@user-dd1di2fv6i
@user-dd1di2fv6i Рік тому
@@Pafel0684 нет )
@frand2158
@frand2158 Рік тому
Насчёт множественных пробелов: split(' ') делает также
@ivanivanovich975
@ivanivanovich975 Рік тому
@@frand2158 нет
@barbosspirat
@barbosspirat 5 місяців тому
​@@Pafel0684пример: "товар\tяблоко".split() = [товар, яблоко] та же строчка только теперь с split(" "), мы получим [товар\tяблоко]
@sergepodkolzin1004
@sergepodkolzin1004 2 роки тому
Не, ну когда reduce добавили с лямбдой, уже усложнено для восприятия, лучше отдельной строкой это делать. Явное лучше неявного или как там в дзене...
@user-sl5lc8xx4q
@user-sl5lc8xx4q 2 роки тому
Да для многих многосторонность читабельнее нежели вот то. Но не знаю, я как человек который боролся, в процессе обучения, за лучшие решения в Кодварс могу сказать этот код выглядит элегантным :)
@doltramir
@doltramir Рік тому
Вместо лямбды с reduce: from math import prod volume = prod(map(int, input().strip().split()))
@nitproject5193
@nitproject5193 2 роки тому
8:20 попався джсер)
@t0digital
@t0digital 2 роки тому
да вот задолбали они, не могли хотя бы синтаксис комментариев во всех ЯП сделать однородным:)
@RuslanKovtun
@RuslanKovtun 2 роки тому
@@t0digital так в питоне комменты как в bash, он ведь с ним конкурировал изначально.
@user-if1dj7fy2y
@user-if1dj7fy2y 16 днів тому
Чудесно звучит🎉❤ а Когда же будет продолжение этой темы разговора😊
@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[:]
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov Рік тому
Алексей, благодарю += 1000 !!
@AlexandrSpb
@AlexandrSpb 2 місяці тому
Очень полезное видео, спасибо!
@Ibrahimib382
@Ibrahimib382 8 місяців тому
Шикарно
@vladimirprin263
@vladimirprin263 Рік тому
многое знал, но пару фишек утащу, спасибо)
@user-bi8ed5gs1r
@user-bi8ed5gs1r Рік тому
Спасибо!
@kryzh_kit
@kryzh_kit 2 роки тому
Хоть и всё изложенное использую, но с удовольствием посмотрел ролик, подача шикарная!)
@viktorh71
@viktorh71 Рік тому
Офигенно!
@user-ir4vd5yk4x
@user-ir4vd5yk4x 2 роки тому
Топовый видос спасибо
@arsenmagomedov4936
@arsenmagomedov4936 2 роки тому
тиринс, спасибо за материал)
@alexanderkramskoy7701
@alexanderkramskoy7701 Рік тому
Очень доходчиво и познавательно! Спасибо!
@alittlemoron4068
@alittlemoron4068 2 роки тому
16:56 только что проверил данный код. На самом деле, это обычный аналог copy.copy функции, которая копирует не объект полностью, а лишь его структуру. Т.е. в случае, если ваш список будет многоуровневым (список в списке), то при изменении внутреннего списка, эти изменения отразятся и на скопированном списке. Так что если нужно железобетонно скопировать список как полностью новый объект, то лучше воспользоваться функцией из модуля copy deepcopy.
@Max-fr3xv
@Max-fr3xv 2 роки тому
+
@PythonDevelopment
@PythonDevelopment 2 роки тому
Ну это понятно и так. Не зря же deepcopy придумали. А срезы как быстрый и элегантный способ работы со списками, кортежами.
@noookm
@noookm 2 роки тому
Очень круто, очень полезно. Спасибо 👍 большое
@user-ur5kc8er8w
@user-ur5kc8er8w Рік тому
спасибо за f'{a=}' !!! В питоне 3.8 тоже работает
@gapchannelAi
@gapchannelAi 2 роки тому
Однозначно лайк
@AlexanderSchepanovski
@AlexanderSchepanovski 2 роки тому
Для in лучше подходит множество
@vachapoluk9035
@vachapoluk9035 2 роки тому
Очень спасибо за формат таких видео!!
@alexbokuto5353
@alexbokuto5353 Рік тому
Спасибо! Очень полезно и понятно!
@bernardsoul8936
@bernardsoul8936 Рік тому
Очень полезное, а главное понятное видео, спасибо большое!
@romanrrv
@romanrrv 2 роки тому
Спасибо! Классный туториал получился!
@user-sn1qp2xq8l
@user-sn1qp2xq8l 2 роки тому
Cпасибо! Очень полезно и наглядно!
@user-zo7gq5sk9k
@user-zo7gq5sk9k Рік тому
Круть.
@user-ey4qp4mq4q
@user-ey4qp4mq4q 2 роки тому
Коротко, ясно, без воды 👍
@MishaSmirnoff
@MishaSmirnoff 2 роки тому
Очень круто
@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)
@Hardy_21
@Hardy_21 3 місяці тому
Братан как же приятно тебя слушать, очень позитивный чувак. За пять лет от галер до крупных банков ни одного хорошего человека на сеньере не встретил. 90 процентов это пассивно-агрессивные, злые, но трусливые шавки нолайферы, которые в технологиях сами еле-еле разбираются. Братан, есть у тебя команда? Я бы с удовольствием поработал с тобой.
@emelyemely8082
@emelyemely8082 Рік тому
про фитбэки, было бы круче
@Dmitriy777JF
@Dmitriy777JF 2 роки тому
Спасибо за конфигурационный словарь!
@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 ты профессиональный разработчик? Работаешь с другими людьми, проходишь код-ревью?
@zaicevIT
@zaicevIT Рік тому
Огромное спасибо за работу, очень полезный видос🤝
@SamSafonov
@SamSafonov Рік тому
Алексей, спасибо за видео!
@sevashpun
@sevashpun 2 роки тому
Отличный урок! Респект!
@Genialbonehead
@Genialbonehead Рік тому
We enjoy typing!
@URich87UA
@URich87UA 2 роки тому
супер, спасибо) очень познавательно)
@iamzeus1250
@iamzeus1250 2 роки тому
Спасибо большое!
@sergv4782
@sergv4782 2 роки тому
Спасибо, полезно)
@goodgriefwhatarelief8899
@goodgriefwhatarelief8899 2 роки тому
Очень круто, спасибо
@user-rt8rx3mq2h
@user-rt8rx3mq2h 2 роки тому
Так. А где вода? Ты мой кумир
@ivanivanov-hl7ry
@ivanivanov-hl7ry 2 роки тому
Первый пример: А можно ведь и без .strip() обойтись, так как без параметров он убирает только whitespaces, а .split() по умолчанию с краёв их тоже уберёт. Т.е. для решения этой же задачи можно просто input().split()
@grieverrr
@grieverrr 2 роки тому
эта история работает только пробельного разделителя, если ты сплитнешь по запятой строку вида a = ", asd , ggg, rrrr , f, j" то пробелы с краев никуда не денутся. поэтому лучше сразу привыкать всегда делать стрип после сплита.
@IgnatikVodichka
@IgnatikVodichka 2 роки тому
Крутая рубрика. Оч крутая. Такого бы по чаще.
@sulfur32066
@sulfur32066 2 роки тому
вері кул, дякую
@Vladim1r
@Vladim1r Рік тому
Да я вообще это все знаю Урааа я крутой питонист юхууу
@alexejo8467
@alexejo8467 2 роки тому
Норм👍 половины незнал
@sergeym3430
@sergeym3430 Рік тому
красИвее!
@alexenderius
@alexenderius Рік тому
Предостережение автору. Упрощая, слово group произносится как /груп/. Если произносить /гроуп/, получается слово grope с совсем другим значением, возможно нежелательным в образовательном видео
@alexandrunknown1456
@alexandrunknown1456 2 роки тому
Вот таких видосов бы больше
@xesax
@xesax 3 місяці тому
теперь вместо reduce проще с prod перемножать
@vovchic3593
@vovchic3593 Рік тому
С объёмом можно вообще так написать print(*[x*y*z for x, y, z in [map(int, input().split())]])
@gatapov
@gatapov 2 роки тому
Очень хорошая и понятная подача материала, спасибо! Можете сделать видео о Django signals?
@t0digital
@t0digital 2 роки тому
Вопрос не по теме - а как вам картинка:)?
@i17talk8
@i17talk8 2 роки тому
и звук ничо. Новая камера?
@vlightendy2539
@vlightendy2539 2 роки тому
Wow 😍
@m_kovalenko
@m_kovalenko 2 роки тому
Пожалуйста, делай отступы когда показываешь IDE. Из-за элементов интерфейса ютуба не видно код
@sw1881
@sw1881 2 роки тому
круто все!
@t0digital
@t0digital 2 роки тому
@@m_kovalenko отступы от краёв экрана, чтобы код не прилипал к краям экрана?
@VitalayManin
@VitalayManin 5 місяців тому
в одну строку. нука интересно. сделай однострочный поиск делителя всех делителей числа 2^1277-1
@AntThinker
@AntThinker 2 роки тому
16:20 Кажется мне, что list(numbers) более читаемо, чем нецелево использованный слайс. И с разворотом то же самое -- есть reversed(). А вообще норм!
@huseeads
@huseeads 2 роки тому
Слайсы популярны и используются повсеместно, с их понимаем проблем возникнуть не должно
@MrTushen
@MrTushen 2 роки тому
More!
@qwerty10959
@qwerty10959 Рік тому
мы рады
@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 бесплатно - ukposts.info/have/v-deo/jIB3haGDo5iklaM.html
@gauss_gun
@gauss_gun Рік тому
Так цель видео в первую очередь обучить этим фичам, а не научить пихать всё в одну строку. Всегда полезно знать, как можно сделать, чтобы применить часть знаний в нужном месте правильно.
@alexeisafronov6627
@alexeisafronov6627 2 роки тому
Классный урок! Круто было бы послушать про протоколы!
@reaexp
@reaexp 2 роки тому
уроки Python бесплатно - ukposts.info/have/v-deo/jIB3haGDo5iklaM.html
@emelyemely8082
@emelyemely8082 Рік тому
в целом, годный видос, пюсану
@emelyemely8082
@emelyemely8082 Рік тому
а вообще, видоас про тинкпад был, по запросу
@vedinar2403
@vedinar2403 2 місяці тому
v = int(x) * int(y) * int(z) тоже красиво и на один оператор меньше
@alexsukhykh5666
@alexsukhykh5666 2 роки тому
Спасибо за all, any. ))
@alexandertomilov6165
@alexandertomilov6165 2 роки тому
💯 ТОП!🔥 Сделай пожалуйста PDF: было/ стало, чтобы все могли скачать и было всегда перед глазами.
@t0digital
@t0digital 2 роки тому
Отличная мысль, сделаем!
@diletech473
@diletech473 2 роки тому
выйти с сохранением :x
@cbrnt4157
@cbrnt4157 Рік тому
Декларативный способ подстановки функции супер! Решил проблему, над который давно думал. Спасибо, Алексей!
@andruhaz
@andruhaz 2 роки тому
Отличное видео, можно сделать серию таких?
@kutsokon
@kutsokon Рік тому
Здорово? Здорово, дорогие друзья!!!
@t0digital
@t0digital Рік тому
Таки да!
@kutsokon
@kutsokon Рік тому
@@t0digital большое спасибо за контент!) все супер!
@fireboyfamily5179
@fireboyfamily5179 Рік тому
Че та я нипонил. А куда ж делся z когда считаем объем через reduce? Что за алхимия? Можете подробнее там для особенных...? Как там подразумевается ввод z? Или позволяет ввести не только 3, но и большее количество значений?
@nikitainiciative356
@nikitainiciative356 2 роки тому
крутое видео, классно понимать, что о мапе я узнал раньше (вчера)
@daryamachigina157
@daryamachigina157 Рік тому
Как вы красиво все объясняете 😌😃
@Michael201078
@Michael201078 2 роки тому
Мегаполезная подборка. Огромнейшее спасибо!
@michaelhin2290
@michaelhin2290 2 роки тому
Спасибо большое, отличное видео! Если бы ещё по golang'у кто-то такое снимал
@Ruslantuber
@Ruslantuber 2 роки тому
Супер полезно! №8 и №11 сразу забрал в свой скрипт. Знал, что как-то лаконичнее можно, но не знал как.
@cryptolover8806
@cryptolover8806 2 роки тому
Top
@codelearner1713
@codelearner1713 2 роки тому
Видео хорошее, но важно помнить, что коротко, не всегда красиво и читаем. И автор говорит об этом. Не забывайте про pep8
@helish_88
@helish_88 2 роки тому
только сейчас понял как работает map, про reduce не знал, спс за видео, как всегда топ
@AlbertFazli
@AlbertFazli Рік тому
Видео про то, как выжить без перла, короля однострочников 😊
@user-so6rz7bz1m
@user-so6rz7bz1m 5 місяців тому
map принимает последовательность вторым аргументом, это ведь несовсем правда, map iterable принимает, это более широкий интерфейс, а sequence это более узкий интерфейс, он iterable (__iter__), sized(__len__) и container(__in__), iterable это может быть и генератор и сопрограмма (Coroutine) это я не поумничать пишу просто мне кажется важным различать ту самую утиную типизацию, где какой минимальный интерфейс необходим, ну и это помогает точно хинты писать, где что надо за материал, большое спасибо, очень полезно
@saibaneko
@saibaneko 2 роки тому
режимы vim на русском, ничего так *THUMBS UP*
@yt222ee
@yt222ee 2 роки тому
так и знал что будет генератор списков, гениальная штука в питоне
@user-qe6ye6lc5q
@user-qe6ye6lc5q 2 роки тому
18:19 :)
@iiepe1915
@iiepe1915 Рік тому
Когда программировал классы, нельзя было сделать через case?
@sergiyr9152
@sergiyr9152 2 роки тому
полезное видео!
@overparser
@overparser 2 роки тому
Офигел с test=123 print(f'{test=}') Не знаю как так вышло но Почему-то не видел такого способа. Выглядит совсем не питонически конечно
@Aseemxan
@Aseemxan 2 роки тому
Можно мне такого препода в универе?
@hinomuratomisaburo4901
@hinomuratomisaburo4901 2 роки тому
ого крутой контент ! класс
@igorratnik2357
@igorratnik2357 2 роки тому
Спасибо Добрый человек. На степике прохожу 2 курс по пайтон поколение питон для продвинутых, на будущее присматриваю, чем продолжить. Увидел ваш курс. Добавил в закладочки. По строчным выражениям очень удобная штука, особенно циклы в них, в том числе вложенные.
@jamjam3337
@jamjam3337 Рік тому
👏
@user-oh8ge1rp2y
@user-oh8ge1rp2y 2 роки тому
Прямо Кунг-Фу - Python!!! 😀🤸‍♂️👍
@dodibilder
@dodibilder Рік тому
О да~ моя сладость это однострочники , правда большинство из них просто нечитаемы (но для егэ инфы код не важен , главное эффективность :)))))
@r35p3ct00
@r35p3ct00 2 роки тому
Жирнющий лайк
@notslip1000
@notslip1000 2 роки тому
Основы функционального синтаксиса на питоне)
@wasyaokyn4077
@wasyaokyn4077 2 роки тому
Про копирование списка: а метод .copy?
@t0digital
@t0digital 2 роки тому
Отработает аналогично [:]
@andrew_z.
@andrew_z. 2 роки тому
а ещё функцией list() тоже аналогичная копия получается.
@wasyaokyn4077
@wasyaokyn4077 2 роки тому
@@andrew_z. А тут у меня уже вопрос производительности. По моим замерам (timeit, список на 10 элементов, 10.000.000 запусков подряд, и 5 замеров): b = a[:] -> 0.99-1.01 секунды b = a.copy() -> 0.95-0.99 секунды b = list(a) -> 1.5-1.7 секунды b = [i for i in a] -> 3.8-4.3 секунды На списке в 1000 элементов время у первого выросло примерно до 21 секунды, у второго и третьего выросло до примерно 22 секунд, четвертый прошел за 230 секунд.
@andrew_z.
@andrew_z. 2 роки тому
@@wasyaokyn4077 у первых трёх близкие результаты по производительности. поэтому главное - это какой вариант лучше смотрится в коде, и это "a.copy()", имхо.
@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]))
@yariktyrykin3393
@yariktyrykin3393 2 роки тому
Возможно стоило также рассказать помимо словарей конфигурации и о существовании ConfigParser'а, все-таки сохранять конфиги нужно также и в моменты "простаивания" программного продукта
@emelyemely8082
@emelyemely8082 Рік тому
термиатор с пракшена называю
@eugene1079
@eugene1079 2 роки тому
Спасибо, видео "пушка". А что за книга была на столе в этом видео?
10 признаков того, что вы новичок в Python
4:59
Разбираем основы Kafka и RabbitMQ
26:54
Digital train | Alex Babin
Переглядів 2,1 тис.
#1. Читаем исходники open source Python библиотек. Loguru!
58:19
Диджитализируй!
Переглядів 88 тис.
Вселенная и Специальная теория относительности.
3:51:36
ЗЛОЙ АНАЛИТИК ВСЕЛЕННОЙ.
Переглядів 6 млн