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

Sdílet
Vložit
  • čas přidán 24. 06. 2024
  • Мой курс «Хардкорная веб-разработка» - 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...

Komentáře • 669

  • @t0digital
    @t0digital  Před 2 lety +39

    Подготовили PDF шпаргалку, которую можно распечатать и держать перед глазами, чтобы быстрее всё запомнить:
    to.digital/s/12-python-oneliners.pdf - цветная версия
    to.digital/s/12-python-oneliners-wb.pdf - чёрно-белая версия
    Мой курс «Хардкорная веб-разработка» - course.to.digital
    Вжух!

    • @salmanchik1
      @salmanchik1 Před rokem +1

      19:28 Чувак, ударение в слове красивее поставил слегка неправильно. А так очень познавательный выпуск.

    • @indravishnu2387
      @indravishnu2387 Před rokem

      Красавчик ! но шпаргалка в формате txt честно не хватает )) !!!!

  • @jornand123
    @jornand123 Před 2 lety +155

    Относительно .split есть неточность: split() и split(" ") - не одно и то же. split() для разделения использует не только пробел, но и все whitespace символы, например, таб, а также последовательность таких символов рассматривается как один - сплитятся слова независимо от кол-ва пробелов между ними. split(" ") сплитит строго по одиночным пробелам

    • @Pafel0684
      @Pafel0684 Před rokem

      Результат то одинаковый?

    • @user-dd1di2fv6i
      @user-dd1di2fv6i Před rokem +10

      @@Pafel0684 нет )

    • @frand2158
      @frand2158 Před rokem

      Насчёт множественных пробелов: split(' ') делает также

    • @ivanivanovich975
      @ivanivanovich975 Před rokem +7

      @@frand2158 нет

    • @barbosspirat
      @barbosspirat Před 7 měsíci

      ​@@Pafel0684пример: "товар\tяблоко".split() = [товар, яблоко] та же строчка только теперь с split(" "), мы получим [товар\tяблоко]

  • @flashxl555
    @flashxl555 Před 2 lety +225

    Нужно добавить, что копирование
    вида L2 = L[:] является поверхностным копированием, а не полным. Это значит, что если есть вложенные в список структуры, например: ещё один список или словарь - то могу возникнуть проблемы. В таких случаях нужно использовать функцию deepcopy из модуля copy.

    • @coppolos
      @coppolos Před 2 lety +11

      мало того, такая штука будет корректно работать только с объектами которые поддерживают срезы

    • @user-om9sf3fi6u
      @user-om9sf3fi6u Před 2 lety +13

      Полезный коммент. В питоне много шансов при обучении упустить историю с глубоким и поверхностным копированием.

    • @valarg5756
      @valarg5756 Před 2 lety +3

      Полностью согласен, тоже смотрел об этом подумал

    • @AJIagguH
      @AJIagguH Před 2 lety +1

      а если вызвать метод copy() ?

    • @flashxl555
      @flashxl555 Před 2 lety +5

      @@AJIagguH Если взять L.copy() - это будет эквивалентно L[:]

  • @sergepodkolzin1004
    @sergepodkolzin1004 Před 2 lety +61

    Не, ну когда reduce добавили с лямбдой, уже усложнено для восприятия, лучше отдельной строкой это делать. Явное лучше неявного или как там в дзене...

    • @user-sl5lc8xx4q
      @user-sl5lc8xx4q Před 2 lety +2

      Да для многих многосторонность читабельнее нежели вот то. Но не знаю, я как человек который боролся, в процессе обучения, за лучшие решения в Кодварс могу сказать этот код выглядит элегантным :)

    • @doltramir
      @doltramir Před 2 lety +3

      Вместо лямбды с reduce:
      from math import prod
      volume = prod(map(int, input().strip().split()))

  • @kryzh_kit
    @kryzh_kit Před 2 lety +12

    Хоть и всё изложенное использую, но с удовольствием посмотрел ролик, подача шикарная!)

  • @astoscope
    @astoscope Před 2 lety +99

    Так то можно и целиком модули/скрипты/программы упихивать в одну строку, но имхо, читаемость кода значительно выше в большинстве случаев, когда кодер не поленился и написал в несколько строк каждое действие пошагово, а не запихнул миллион действий в одну строку, действия в которой выполняются теперь и не слева направо и не справа налево, а в порядке, индивидуальном для каждого случая.
    Что такое x * y * z понятно сразу, а редьюс от принципиально неименуемой функции и мапа с данными, которые хз какие они там придут вообще - это нифига без пузыря и не разберешься, нафига оно нужно тут

    • @bari_grey_woolf_6988
      @bari_grey_woolf_6988 Před 2 lety +2

      пиши машинный код, будет понятно

    • @pavelgushchin2223
      @pavelgushchin2223 Před 2 lety +19

      @HoroscopeVideo - Гороскоп на сегодня Единственный здравый комментарий. Без мата на его редьюс невозможно смотреть

    • @magomedmagomedov9168
      @magomedmagomedov9168 Před 2 lety +16

      Ну когда переменных 2-3 то конечно лучше не использовать reduce, но если их 30-40, то reduce смотрится уже привлекательнее

    • @reaexp
      @reaexp Před 2 lety

      уроки Python бесплатно - czcams.com/video/TPFQkLlbs4o/video.html

    • @gauss_gun
      @gauss_gun Před 2 lety +3

      Так цель видео в первую очередь обучить этим фичам, а не научить пихать всё в одну строку. Всегда полезно знать, как можно сделать, чтобы применить часть знаний в нужном месте правильно.

  • @ssatskov
    @ssatskov Před 2 lety +57

    Крутое видео, подача как всегда на уровне!
    НО
    Думаю, нужно было бы добавить про:
    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 Před 2 lety +1

      py - python ?:)

    • @nataliepodgainova6582
      @nataliepodgainova6582 Před rokem

      Спасибо мне было очень полезно, 3-5 вообще не знала

    • @shadowraze6928
      @shadowraze6928 Před 7 měsíci

      еще можна 10e6, число после `e` - количество нулей

  • @ivanivanov-hl7ry
    @ivanivanov-hl7ry Před 2 lety +28

    Первый пример:
    А можно ведь и без .strip() обойтись, так как без параметров он убирает только whitespaces, а .split() по умолчанию с краёв их тоже уберёт. Т.е. для решения этой же задачи можно просто input().split()

    • @grieverrr
      @grieverrr Před 2 lety +2

      эта история работает только пробельного разделителя, если ты сплитнешь по запятой строку вида a = ", asd , ggg, rrrr , f, j" то пробелы с краев никуда не денутся. поэтому лучше сразу привыкать всегда делать стрип после сплита.

  • @user-ey4qp4mq4q
    @user-ey4qp4mq4q Před 2 lety

    Коротко, ясно, без воды 👍

  • @vachapoluk9035
    @vachapoluk9035 Před 2 lety

    Очень спасибо за формат таких видео!!

  • @alexanderkramskoy7701
    @alexanderkramskoy7701 Před rokem +1

    Очень доходчиво и познавательно! Спасибо!

  • @Hardy_21
    @Hardy_21 Před 5 měsíci +1

    Братан как же приятно тебя слушать, очень позитивный чувак. За пять лет от галер до крупных банков ни одного хорошего человека на сеньере не встретил. 90 процентов это пассивно-агрессивные, злые, но трусливые шавки нолайферы, которые в технологиях сами еле-еле разбираются. Братан, есть у тебя команда? Я бы с удовольствием поработал с тобой.

  • @alittlemoron4068
    @alittlemoron4068 Před 2 lety +33

    16:56 только что проверил данный код. На самом деле, это обычный аналог copy.copy функции, которая копирует не объект полностью, а лишь его структуру. Т.е. в случае, если ваш список будет многоуровневым (список в списке), то при изменении внутреннего списка, эти изменения отразятся и на скопированном списке.
    Так что если нужно железобетонно скопировать список как полностью новый объект, то лучше воспользоваться функцией из модуля copy deepcopy.

    • @Max-fr3xv
      @Max-fr3xv Před 2 lety +4

      +

    • @PythonDevelopment
      @PythonDevelopment Před 2 lety +1

      Ну это понятно и так. Не зря же deepcopy придумали. А срезы как быстрый и элегантный способ работы со списками, кортежами.

  • @bernardsoul8936
    @bernardsoul8936 Před rokem +1

    Очень полезное, а главное понятное видео, спасибо большое!

  • @noookm
    @noookm Před 2 lety +1

    Очень круто, очень полезно. Спасибо 👍 большое

  • @romanrrv
    @romanrrv Před 2 lety

    Спасибо! Классный туториал получился!

  • @alexbokuto5353
    @alexbokuto5353 Před 2 lety +1

    Спасибо! Очень полезно и понятно!

  • @user-sn1qp2xq8l
    @user-sn1qp2xq8l Před 2 lety

    Cпасибо! Очень полезно и наглядно!

  • @helish_88
    @helish_88 Před 2 lety +30

    только сейчас понял как работает map, про reduce не знал, спс за видео, как всегда топ

  • @cbrnt4157
    @cbrnt4157 Před 2 lety

    Декларативный способ подстановки функции супер! Решил проблему, над который давно думал. Спасибо, Алексей!

  • @IgnatikVodichka
    @IgnatikVodichka Před 2 lety +1

    Крутая рубрика. Оч крутая. Такого бы по чаще.

  • @AlexandrSpb
    @AlexandrSpb Před 4 měsíci

    Очень полезное видео, спасибо!

  • @URich87UA
    @URich87UA Před 2 lety

    супер, спасибо) очень познавательно)

  • @sevashpun
    @sevashpun Před 2 lety

    Отличный урок! Респект!

  • @Vjidowkdkcpapqkfjfw
    @Vjidowkdkcpapqkfjfw Před měsícem

    Алексей, спасибо! Долго держал видео в закладках. В итоге, когда сейчас посмотрел, то всё уже знаю. Но, подача, как всегда, отличная. Спасибо ещё раз! Ждём новых подобных видео!

  • @zaicevIT
    @zaicevIT Před rokem

    Огромное спасибо за работу, очень полезный видос🤝

  • @SamSafonov
    @SamSafonov Před rokem

    Алексей, спасибо за видео!

  • @Dmitriy777JF
    @Dmitriy777JF Před 2 lety

    Спасибо за конфигурационный словарь!

  • @yariktyrykin3393
    @yariktyrykin3393 Před 2 lety +1

    Возможно стоило также рассказать помимо словарей конфигурации и о существовании ConfigParser'а, все-таки сохранять конфиги нужно также и в моменты "простаивания" программного продукта

  • @gatapov
    @gatapov Před 2 lety +1

    Очень хорошая и понятная подача материала, спасибо! Можете сделать видео о Django signals?

  • @vladimir_s1961
    @vladimir_s1961 Před 2 lety +5

    Из серии "хозяйке на заметку" - просто, легко, красиво. Приятно слушать человека, который знает, о чем говорит. Спасибо!

  • @igorratnik2357
    @igorratnik2357 Před 2 lety +1

    Спасибо Добрый человек. На степике прохожу 2 курс по пайтон поколение питон для продвинутых, на будущее присматриваю, чем продолжить. Увидел ваш курс. Добавил в закладочки. По строчным выражениям очень удобная штука, особенно циклы в них, в том числе вложенные.

  • @vitalik100500q
    @vitalik100500q Před 2 lety +2

    В последнем примере можно сделать декоратор который будет генерировать айтемы в этом словаре и навесить его на функции обработчики, а так же дополнительно можно сделать функцию которая будет резолвить это, может быть удобно если структура более сложная, со вложенными словарями

  • @alexandrunknown1456
    @alexandrunknown1456 Před 2 lety +1

    Вот таких видосов бы больше

  • @alexeisafronov6627
    @alexeisafronov6627 Před 2 lety +1

    Классный урок!
    Круто было бы послушать про протоколы!

    • @reaexp
      @reaexp Před 2 lety

      уроки Python бесплатно - czcams.com/video/TPFQkLlbs4o/video.html

  • @sergv4782
    @sergv4782 Před 2 lety

    Спасибо, полезно)

  • @Ruslantuber
    @Ruslantuber Před 2 lety +1

    Супер полезно! №8 и №11 сразу забрал в свой скрипт. Знал, что как-то лаконичнее можно, но не знал как.

  • @user-if1dj7fy2y
    @user-if1dj7fy2y Před 2 měsíci

    Чудесно звучит🎉❤ а Когда же будет продолжение этой темы разговора😊

  • @iamzeus1250
    @iamzeus1250 Před 2 lety

    Спасибо большое!

  • @goodgriefwhatarelief8899

    Очень круто, спасибо

  • @nikitainiciative356
    @nikitainiciative356 Před 2 lety

    крутое видео, классно понимать, что о мапе я узнал раньше (вчера)

  • @daryamachigina157
    @daryamachigina157 Před 2 lety

    Как вы красиво все объясняете 😌😃

  • @michaelhin2290
    @michaelhin2290 Před 2 lety

    Спасибо большое, отличное видео!
    Если бы ещё по golang'у кто-то такое снимал

  • @vladimirprin263
    @vladimirprin263 Před rokem

    многое знал, но пару фишек утащу, спасибо)

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov Před 2 lety

    Алексей, благодарю += 1000 !!

  • @t0digital
    @t0digital  Před 2 lety +43

    Вопрос не по теме - а как вам картинка:)?

    • @i17talk8
      @i17talk8 Před 2 lety +2

      и звук ничо. Новая камера?

    • @vlightendy2539
      @vlightendy2539 Před 2 lety +2

      Wow 😍

    • @m_kovalenko
      @m_kovalenko Před 2 lety +2

      Пожалуйста, делай отступы когда показываешь IDE. Из-за элементов интерфейса ютуба не видно код

    • @sw1881
      @sw1881 Před 2 lety

      круто все!

    • @t0digital
      @t0digital  Před 2 lety +3

      @@m_kovalenko отступы от краёв экрана, чтобы код не прилипал к краям экрана?

  • @codelearner1713
    @codelearner1713 Před 2 lety +6

    Видео хорошее, но важно помнить, что коротко, не всегда красиво и читаем. И автор говорит об этом. Не забывайте про pep8

  • @Michael201078
    @Michael201078 Před 2 lety +1

    Мегаполезная подборка. Огромнейшее спасибо!

  • @alexandertomilov6165
    @alexandertomilov6165 Před 2 lety +2

    💯 ТОП!🔥 Сделай пожалуйста PDF: было/ стало, чтобы все могли скачать и было всегда перед глазами.

    • @t0digital
      @t0digital  Před 2 lety +1

      Отличная мысль, сделаем!

  • @viktorh71
    @viktorh71 Před 2 lety

    Офигенно!

  • @AntThinker
    @AntThinker Před 2 lety +12

    16:20 Кажется мне, что list(numbers) более читаемо, чем нецелево использованный слайс. И с разворотом то же самое -- есть reversed(). А вообще норм!

    • @huseeads
      @huseeads Před 2 lety

      Слайсы популярны и используются повсеместно, с их понимаем проблем возникнуть не должно

  • @andruhaz
    @andruhaz Před 2 lety

    Отличное видео, можно сделать серию таких?

  • @hinomuratomisaburo4901

    ого крутой контент ! класс

  • @eugene1079
    @eugene1079 Před 2 lety

    Спасибо, видео "пушка". А что за книга была на столе в этом видео?

  • @valarg5756
    @valarg5756 Před 2 lety +22

    В последнем примере с условиями думал нововведение switch и case сейчас покажешь,ан нет, на деле другое исполнение донес :) спасибо, не знал

    • @C0oo1D
      @C0oo1D Před 2 lety +2

      Он же вроде в 3.10, а тут 3.9 =)

    • @user-ot5iy5es4l
      @user-ot5iy5es4l Před 2 lety

      вообще не вижу какой то пользы от match,
      передаёшь функции объект, а далее кейсы перехватывают.Всё то же самое можно реализовать условиями.

    • @andreiosipov2766
      @andreiosipov2766 Před 2 lety +2

      @@user-ot5iy5es4l если у тебя более одного elif, то ты движешься куда-то не туда)

    • @user-ot5iy5es4l
      @user-ot5iy5es4l Před 2 lety +1

      @@andreiosipov2766 это откуда ты такое взял что elif нельзя употреблять более раза?другое дело если else более раза

    • @andreiosipov2766
      @andreiosipov2766 Před 2 lety

      @@user-ot5iy5es4l ты профессиональный разработчик? Работаешь с другими людьми, проходишь код-ревью?

  • @user-hj6oh4bw3n
    @user-hj6oh4bw3n Před 2 lety +2

    Вместо последнего пункта напрашивается создать Интерфейс Group, от которого будут наследоваться AdminGroup, ManagerGroup и т.д. Они будут по разному определять метод process_request.Тогда вместо стринга можно в конструктор User передать Request через интерфейс

  • @nitproject5193
    @nitproject5193 Před 2 lety +13

    8:20 попався джсер)

    • @t0digital
      @t0digital  Před 2 lety +6

      да вот задолбали они, не могли хотя бы синтаксис комментариев во всех ЯП сделать однородным:)

    • @RuslanKovtun
      @RuslanKovtun Před 2 lety

      @@t0digital так в питоне комменты как в bash, он ведь с ним конкурировал изначально.

  • @vladimirtalpa5390
    @vladimirtalpa5390 Před 2 lety +2

    Смотрю уже в середине ролика и думаю, надо бы написать, чтобы снял про замену if_else на dict_get - а в конце финальный аккорд как раз об этом. Молодец! Крутой мануал для джунов - ведь на собесех постоянно спрашивают об этих фишках.
    Такой же ролик стоит снять про:
    @staticmethod
    @classmethod
    @dataclass
    про использование абстрактных классов
    про синглтоны
    про конечные автоматы или машины состояний

    • @vladimirtalpa5390
      @vladimirtalpa5390 Před 2 lety

      а ещё очень крутая штука это @context. Ее как раз используют в машине состояний , но и не только

  • @maximshumilo3728
    @maximshumilo3728 Před 2 lety +1

    Все супер, в эффективности и читаемости не везде конечно соглашусь, но в целом большинство «приемчиков» достаточно хорошо упрощают читаемость кода.
    А будут ли какие-то более продвинутые темы?

  • @user-bi8ed5gs1r
    @user-bi8ed5gs1r Před rokem

    Спасибо!

  • @Yarikorg
    @Yarikorg Před 2 lety

    Хорошее видео, спасибо.
    Так глядишь, мне Пайтон зайдет и начну его использовать.
    Много от Перл там вижу. Не знаю что раньше появилось.

  • @MrPavelFrolov
    @MrPavelFrolov Před 2 lety

    Спасибо за видео, хороший формат, давно искал такое. К сожалению, ничего нового для себя не увидел, хотелось бы чего то нового, может быть сложнее, или "спрятанного".

  • @user-ir4vd5yk4x
    @user-ir4vd5yk4x Před 2 lety

    Топовый видос спасибо

  • @VikMoc
    @VikMoc Před 2 lety

    Интересное видео, особенно для того, кто только знакомится с python

  • @clauseclause6640
    @clauseclause6640 Před 2 lety +2

    Сразу лайк =) ну и...
    вкусовщина конечно, но вместо lambda x, y: x * y можно использовать operator.mul
    а по последнему имхо наглядней Enum ну и можно через f-строку красиво сделать, например если это методы класса - getattr(self, f"process_{user.group}_request")(user, request)

    • @reaexp
      @reaexp Před 2 lety

      уроки Python бесплатно - czcams.com/video/TPFQkLlbs4o/video.html

  • @cryptoworkdonkey
    @cryptoworkdonkey Před 2 lety

    Спасибо за хаки. Компрехеншны удобны. К обработке текста нужно привыкнуть.
    Например в R фильтрация идёт грепом:
    names = c('Хри', 'Аде', 'Тэя', 'Сте', 'Арх')
    grep("^А", names, value = TRUE)
    или конвейером:
    names %>% grep ("^А", ., value = TRUE)
    И в ифчиках/фильтрах есть булевый grepl(). Вот прям оч удобно.

  • @arsenmagomedov4936
    @arsenmagomedov4936 Před 2 lety

    тиринс, спасибо за материал)

  • @alexsukhykh5666
    @alexsukhykh5666 Před 2 lety +2

    Спасибо за all, any. ))

  • @gustaugutter9477
    @gustaugutter9477 Před 2 lety +2

    *тидимс*
    И вот я оставил комментарий в поддержку отличного контента)

  • @deve1oper
    @deve1oper Před 2 lety

    Ну довольно простые приемы, все их я уже знал, кроме последнего, но там можно логически додуматься, хорошо зная питон, однако материал клевый, подача супер, все быстро, наглядно, с объяснениями, супер!

  • @C0oo1D
    @C0oo1D Před 2 lety

    Сразу зачесалось дополнить))
    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)

  • @ValeriyM_46
    @ValeriyM_46 Před 29 dny

    это было афуенно!

  • @user-iu6xg8wo8l
    @user-iu6xg8wo8l Před 2 lety

    Думал, что все уже знаю, но узнал про any и all только сейчас, спасибо за видос

    • @kai.hexendorf
      @kai.hexendorf Před 2 měsíci

      Так в нормальных языках люди смотрят в спецификацию коллекции и обнаруживают у неё все необходимые функциональные методы filter, map, all, every... А в python перевернули всё с ног на голову, и поэтому чтобы узнать о существовании глобальных методов all, any, должно снизойти свыше.

  • @drdrdr6835
    @drdrdr6835 Před 2 lety +5

    То чувство что сначала сам решал задание а потом смотрел пример, почти все аналогично сделал🤔

  • @sergiyr9152
    @sergiyr9152 Před 2 lety

    полезное видео!

  • @user-tl8gn9yg1b
    @user-tl8gn9yg1b Před 2 lety +4

    24:20 - гораздо эффективнее в таких случаях прибегнуть к полиморфизму.
    Спасибо за видео!

  • @user-gb4cl5jv8l
    @user-gb4cl5jv8l Před 2 lety

    Спасибо за ролик. В №12 что будет если группы пользователя нету в словаре?

  • @mykolakudinov4403
    @mykolakudinov4403 Před 2 lety +2

    Конфигурационный словарь нужно будет согласовывать со списком типов пользователя. Этот вопрос будет решён если вместо строки использовать dataclass(name: str + process_request: Callable) как аргумент __init__ . В таком случае мы можем спрятать вызов process_request с user как аргумент внутри функции класса User.

    • @mykolakudinov4403
      @mykolakudinov4403 Před 2 lety

      Опять таки знаю об этом я только благодаря твои предыдущим роликам

  • @Ibrahimib382
    @Ibrahimib382 Před 10 měsíci

    Шикарно

  • @user-qt4gz1dl6w
    @user-qt4gz1dl6w Před 2 lety

    Было бы круто если ты бы сделал обзор всей библиотеки functools, там же не один метод reduce?

  • @amigo4884
    @amigo4884 Před 2 lety

    Привет! Большое спасибо за видео. Не так давно ты говорил, что там, где требуется быстродействие код пишется на Go или на C/C++. У меня вопрос: чистый C жив в веб-разработке?

    • @t0digital
      @t0digital  Před 2 lety +1

      Привет! Не могу сказать про C/С++, так как не слежу за ними. Думаю, что какие-то хардкорные вещи под нагрузку пишутся на С или C++, но в будущем Rust их вытеснит в таких нишах.

    • @SantaCluster
      @SantaCluster Před 2 lety

      интересно, а вытеснит ли Rust парочку C/C++ совсем? (для новых проектов, исключая имеющееся наследие)

  • @ONYX_RU
    @ONYX_RU Před 2 lety +1

    Я заговнокодил первый вариант без дополнительных библиотек и чисто в одну строку)):
    for num in [input().split() for x in range(1)]:print(int(num[0])*int(num[1])*int(num[2]))

  • @gapchannelAi
    @gapchannelAi Před 2 lety

    Однозначно лайк

  • @yt222ee
    @yt222ee Před 2 lety +1

    так и знал что будет генератор списков, гениальная штука в питоне

  • @RuslanKovtun
    @RuslanKovtun Před 2 lety +1

    6:30 - `from operators import mul` и не надо лямбду писать, ну или `int.__mul__` но это больше текста и читабельность падает.

  • @mrmedbedb1256
    @mrmedbedb1256 Před 2 lety

    list comps, dict comp, gen exp это убойные инструменты питониста.
    В сочетании с тернарным оператором вообще на глушняк :)

  • @Namynnuz
    @Namynnuz Před 2 lety

    Лямбды выглядят чуждо для семантики языка. В шарпее с 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.

  • @rinaatt
    @rinaatt Před rokem

    Недавно вывел для себя такой однострочник.
    Допустим есть такая структура:
    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)

  • @user-fd7ce2em5y
    @user-fd7ce2em5y Před 2 lety +7

    Видос супер. Бомбезные штуки показаны. Даже знаю где можно в моих проектах это могло бы заменить мой говнокод. Я в python новичок и выглядит всё это очень понятно и внятно, во многом благодаря подаче автора. Выражаю большую благодарность за столь мощный подход к созданию контента.

    • @pythonofsky4545
      @pythonofsky4545 Před 2 lety +1

      Думаешь, если ты пишешь по другому, например, перебор в цикле вместо in то твой код уже говнокод? Эти фишки только для профи, которые фигачат на питоне по 8 часов в день и так забадываются, что быстреев одну строку написать, чем цикл или функции расписывать. А на самом деле классический вид и работает быстрее, и читается лучше. Сам иногда грешу всякими тернарниками и лямбдами, а потом мой код никто понять не может... ))

    • @user-fd7ce2em5y
      @user-fd7ce2em5y Před 2 lety

      @@pythonofsky4545 нет, думаю если ты не знаешь синтаксические и общепринятые конструкции, то собираешь велосипед, у которого и педали крутить сложно и руль фиг пойми как работает и колёса в разные стороны крутятся. Ясно правило "Нормально делай - нормально будет", но иногда из-за не знания особенностей различных инструментов лепишь фиг пойми какую чушь. И я тоже за понятный код, но в некоторых моментах всё-таки стоит использовать лаконичные подходы, которые и читаются просто, если знать язык, и не загромождают код ненужной белибердой.

  • @user-bv4mh7xb2p
    @user-bv4mh7xb2p Před 2 lety

    print('Василий' if 'Василий' in ('Христофор','Василий') else '')
    Таким образом можно сократить условие и вывод до одной строчки.Блок else в данном случае обязательный (тут он просто выведет пустую строку если нашего имени не обнаружилось в кортеже)

  • @MishaSmirnoff
    @MishaSmirnoff Před 2 lety

    Очень круто

  • @13danyocean13
    @13danyocean13 Před 2 lety +1

    О теме с конфигурацией: кроме простой и pythonic конструкции мы также получим сложность O(1), вместо O(n)(при реализации c кучей elif).

    • @reaexp
      @reaexp Před 2 lety

      уроки Python бесплатно - czcams.com/video/TPFQkLlbs4o/video.html

  • @serhiiriznychenko4108
    @serhiiriznychenko4108 Před 2 lety

    Если кому интересно, вот как первая функция будет выглядеть на языке scala:
    input.trim.split(" ").map(_.toInt).product

  • @bulhi
    @bulhi Před 2 lety +1

    Знаешь, спасибо тебе
    Когда-то давно я просто смотрел твои видосы, ничего не понимал
    Потом через время начал учиться жабускрипт, и спустя пол года устроился
    Сейчас, спустя 8 месяцев работы, являюсь мидл фулстак разрабом, с зп в 200 рублей
    Недавно увидел первый лям, и задумался с чего все начиналось и твой видос с реки попал, и все сошлось
    Спасибо!!

    • @bulhi
      @bulhi Před 2 lety

      Update: плюс ко всему мне 19)

  • @Darqsatyricon
    @Darqsatyricon Před 2 lety +1

    Интересно псмотреть на покрытие юнит тестами при любви к однострочкам... И что-нибудь услышать про maintainability кода где в одну строку выполняется сразу несколько операций. Ты, наверное, сознательно опустил процесс валидации инпута в первом примере и любой еррор хендлинг. Вобщем, чёт я ожидал большего. Больше выглядит как студенческий код для фриланса нежели продакшн код с какого то нормального проекта или энтерпрайза.

    • @t0digital
      @t0digital  Před 2 lety

      Вот это - нечитаемо:
      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)
      Ну ок:)

  • @nitroflap
    @nitroflap Před 2 lety +2

    Большинство я уже знаю, но все таки, довольно много интересного узнал. Классно! А все таки... когда будет Go...?

    • @t0digital
      @t0digital  Před 2 lety +9

      Возможно будет раст вместо го:)

    • @nitroflap
      @nitroflap Před 2 lety

      @@t0digital А почему? Гошка же лучше для веба :O

    • @t0digital
      @t0digital  Před 2 lety +1

      Пока не сложил для себя однозначного мнения по этому поводу. Go проще, это факт, но простота это не всегда лучше

    • @user-lh6ou6de6l
      @user-lh6ou6de6l Před 2 lety +3

      @@t0digital вау раст! Слышал много хорошего, было бы интересно

    • @t0digital
      @t0digital  Před 2 lety +3

      вот и мне интересно, изучаю

  • @Monte_Cristo_R
    @Monte_Cristo_R Před 2 lety +1

    Подскажите , почему цену на курс подняли с 20 до 30 ? Посчитали что цена низкая(конечно это дело автора , и я не с целью упрекнуть , но просто интересно откуда такое ценообразование и повышение на 1/3)? Получается примерно те первые 250-300 человек кто приобрёл курс успели и им повезло ? И значит ли это что в будущем цена ещё вырасти может и на сколько ?

  • @vol1ura
    @vol1ura Před 2 lety

    На Ruby это можно записать ещё короче )) и даже импорт делать не придётся. Например,
    volume = gets.strip.split.map(&:to_i).reduce(&:*)
    А последний пример, который здесь показан и занимает 5 строчек (ну или 2 но очень длинные), можно записать
    self.send "process_#{user.group}_request".to_sym user request

    • @palyaros02
      @palyaros02 Před 2 lety

      последний пример тоже можно оптимизировать разными способами до состояния одной короткой строчки. Например, использовать eval, магические методы или сделать декоратор. Автор просто не стал идти в такие дебри.

  • @user-oe5ok3sj4q
    @user-oe5ok3sj4q Před rokem

    К сплиту лепить стрип не надо, т.к. сплит уже убрал лишние пробелы. Такая конструкция может применяться в случае если мы в сплит передаем аргумент с конкретным разделителем.
    Срезы не изменяют список, т.е. конструкция список[::-1] просто возвращает список в обратном порядке, список при этом остался в первоначальном варианте. Для того чтобы развернуть список используется reverse().

  • @daniilpopkov4176
    @daniilpopkov4176 Před 2 lety +1

    По поводу пункта 6, будьте внимательны, это поверхностное копирование.
    Если вам нужно полное используйте deepcopy