Основное оружие питониста: Listcomps и Genexp

Поделиться
HTML-код
  • Опубликовано: 8 фев 2021
  • Рассмотрим обязательные для понимания и использования киллер-фичи Python, поговорим о плюсах-минусах, особенностях, когда и что использовать.
    Основные моменты:
    1) все компсы и генэксп работают по принципу
    [ВЫРАЖЕНИЕ/ПРЕОБРАЗОВАНИЕ for element in ИСТОЧНИК if УСЛОВИЕ]
    читается это слева направо, что важно когда циклов больше 1.
    2) принцип работы операций у листкомпс и генэксп одинаков, синтаксически различаются скобками
    3) компсы (листкомпс, сеткомпс, дикткомпс) в результате своей работы формируют соответствующую коллекцию и занимают память
    4) переменные созданные внутри компсов или генэкспа недоступны извне
    5) генэксп вернет объект, а не коллекцию! при создании объекта он проверит источник, что может быть критично, если это какая то функция. Если источник не валидный то ошибка упадет при создании генератора, а не при попытке получить значение
    6) генэксп ленивый, то есть ничего не делает и не занимает память пока не потребуется значение. Сгенерировав значение снова засыпает пока опять не попросят новое.
    7) генэксп одноразовый, при исчерпании начинает бросать исключение, которое мы не увидим, если используем генератор в цикле for
    8) генэксп может потенциально генерировать бесконечные последовательности, но он ничего не знает о порядке элементов или о их количестве (нет len)
    Лично мое мнение - если вам не нужна длина, слайсы, индексы, то нужно использовать генэскп, не только из-за экономии памяти, но и из-за ленивости, экономии процессорного времени.
    Естественно важно помнить что даже pep-8 и дзен - это не закон, а рекомендации, наша конкретная реализация и подход должны диктоваться имеющимися условиями и решаемой задачей.
    Полезные ссылки:
    docs.python.org/3/tutorial/da...
    docs.python.org/3/reference/e...
    docs.python.org/3/howto/funct...
    docs.python.org/3/whatsnew/2....
    Присоединяйся к помощи каналу, будет интересно)
    ✔️Бусти boosty.to/python_russian/donate
    ✔️Юмани 410011506612886
    Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
    #Python #PythonRussian #PyCharm

Комментарии • 83

  • @germanborisov1765
    @germanborisov1765 Год назад +8

    Комментарий для тех, кого отпугивает большой хронометраж видео - каждая минута приближает вас к пониманию материала. "Вода" в видео отсутствует, всё подробно объяснено и разобрано на примерах, проговорен каждый нюанс! В более коротких роликах других авторов на данную тему чего-то не хватает для полного понимания. Получил не только знания, но и удовольствие от просмотра видео, спасибо автору!!!

    • @za_rekoi
      @za_rekoi 25 дней назад

      Автор просто маэстро знания и слова!

  • @user-nj2ud4yz5u
    @user-nj2ud4yz5u 12 дней назад +1

    Получилось очень круто подробно и понятно! Спасибо!

  • @likeclockwork9600
    @likeclockwork9600 Год назад +25

    Единственный человек, который может объяснить по человечески и пусть иной раз, как маленьким детям разжевывает (когда мы что-то новое изучаем, мы они и есть)
    Пересмотрел много туториалов, но было ощущение , что набрал по верхам и не особо вник в тему, а тут прям как ПОНЯЛ, еле унес!) И такое ощущение было по многим темам автора.
    Очень удивлен малому количеству подписчиков.
    Жаль, что в последнее время не так много уроков делаете у вас отлично получается учить и объяснять.
    С меня, просмотр всех видео и лайк под каждым. (не факт, что с новой политикой ютуба это что-то даст, но это будет моя благодарность Вам за проделанный не легкий труд)

    • @PythonRussian
      @PythonRussian  Год назад +6

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

    • @kostiantyn8378
      @kostiantyn8378 Год назад +3

      Поддерживаю. Прохожу курс на Udemy, но когда что то не ясно иду на этот канал за разьяснениями. Смотрю Егорова иногда и ничего не могу понять, иду сюда и все ясно и просто. В общем вы отлично объясняете. Жаль что видео на канале мало

    • @barma1309
      @barma1309 Год назад +1

      А где платная подписка?

    • @MikeDev-Sooworr
      @MikeDev-Sooworr 3 месяца назад

      Всегда ленюсь писать комментарии.., но точно так же думаю об этом канале и его авторе. Именно.

  • @user-ed6qc1pn5o
    @user-ed6qc1pn5o 2 месяца назад +1

    Пожалуй, лучшее объяснение, которое я встречал.

  • @ft.6518
    @ft.6518 10 месяцев назад +1

    Очень хорошо, что в микромоментах вы пока озвучиваете что будете делать, а потом делаете. Это дает возможность услышать задачу, поставить на паузу, попробовать самому и потом проверить себя же)

  • @user-vr8qy4yg8n
    @user-vr8qy4yg8n 6 месяцев назад +1

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

  • @user-kw9gx6dd2x
    @user-kw9gx6dd2x 2 года назад +2

    Ну прям как на тарелочке всё изложено!!! Респект! Лайк однозначно!

  • @user-vm5kf3bp3s
    @user-vm5kf3bp3s 2 года назад +2

    Одновременно: Ваше видео , Лутц и Однострочниики в Python/ Последняя слишком узко, но наверное кому то прямо в тему. Лутц - классика для спокойного прочтения с комп под рукой. Ваше - быстро и информативно. Всегда с удовольствием гляжу канал

  • @Vladimir-bz9tg
    @Vladimir-bz9tg Год назад

    Спасибо Вам за Ваши видео

  • @mynameistailz6845
    @mynameistailz6845 2 года назад

    Спасибо за урок. Всё чётко и понятно.

  • @jackhopckien4566
    @jackhopckien4566 5 месяцев назад

    Спасибо за урок. Отлично и подробно все рассказано

  • @voila2000
    @voila2000 3 года назад

    Спасибо. Очень толково и полезно.

  • @sevakvart1111
    @sevakvart1111 3 года назад +2

    отличный урок, 5+

  • @user-gc4ic9xc1j
    @user-gc4ic9xc1j Год назад

    Спасибо за видео, замечательное объяснение сути, это на мое мнение лучшая подача информации

  • @user-ch2oe7lu1x
    @user-ch2oe7lu1x 3 года назад +2

    Класс, вообще не жалею что зашёл посмотреть видео, так как я знал про listcomps и genexp(я думал что всё про них знаю), но я ошибался. В общем много различных фич и крутая информация!

  • @user-wv6mj4iz1y
    @user-wv6mj4iz1y Год назад

    Большое спасибо автору! Отличная лекция! Все изложено очень просто и понятно, как раз, для начинающих!

  • @SoloveY1990
    @SoloveY1990 Год назад +2

    Большое спасибо! прохожу курсы по питону. Информация на канале очень помогает понять как глобальные вещи, так и ньюансы. Пожалуйста, продолжай. Если бы было бусти или что то типо того обязательно бы подписался!

  • @kochcubing
    @kochcubing Год назад +1

    Спасибо за ваши видео. Очень помогают.
    Вариант с матрицей и ее выводом без pprint на 18й минуте:
    ___
    matrix = [[col for col in range(3)] for row in range(3)]
    for row in matrix:
    print(row)
    -----
    *источник: DataCamp

  • @y18kotov
    @y18kotov Год назад

    Автор молодец! спасибо

  • @pfw4517
    @pfw4517 Год назад +1

    Спасибо огромное Вам за эти видео! Я прямо совсем новичёк в питонячих делах (занимался только программированием PLC на МЭК 6-1131/3), но то, как вы передаёте материал даже до меня доходит! 😁 По возможности буду поддерживать канал финансово). Очень надеюсь, что Вы будете развивать канал. Такого годного и понятного контента крайне мало на просторах интернета.

    • @PythonRussian
      @PythonRussian  Год назад +1

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

  • @za_rekoi
    @za_rekoi 24 дня назад

    Благодарочка.

  • @data19101988
    @data19101988 Год назад

    Обожаю книги и подход "для чайников". Спасибо за работу

  • @fedordostoevskiy4209
    @fedordostoevskiy4209 Год назад +1

    👍, пишу на js, но не завидую))) Но прикольно, конечно.

  • @themarineussr2011
    @themarineussr2011 11 месяцев назад +1

    спасибо, отличный урок...
    хотелось бы еще увидеть ваше видео про рекурсию

    • @PythonRussian
      @PythonRussian  11 месяцев назад

      я просто не совсем понимаю что про рекурсию рассказывать, но подумаю

    • @themarineussr2011
      @themarineussr2011 11 месяцев назад

      @@PythonRussian для новичков очень тяжелая и непонятная тема...
      опытные программисты говорят, что можно разделить на 2 категории - те, кто ее ненавидят и те, кто рекурсию поняли, и постоянно ее применяют...и рекурсия ускоряет экономит много времени, хотя и можно обойтись и без рекурсии описав код циклами
      Я вот много посмотрел видео про рекурсию - и вот вроде понял, а применять даже в написании простеньких задач не могу - впадаю в ступор... оказалось - не я один такой
      Хотелось бы увидеть ваше объяснение - уж больно круто - доходчиво, понятно, что как и где ....

  • @user-do4nq3fr6t
    @user-do4nq3fr6t 3 года назад

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

    • @PythonRussian
      @PythonRussian  3 года назад

      так нас тут всего ничего, вот дорастем хотя бы до 1000 тогда можно что-то в этом роде, побеседовать о разных темах. Мысль неплохая

    • @user-do4nq3fr6t
      @user-do4nq3fr6t 3 года назад

      @@PythonRussian всё же предлагаю провести тестовый стрим, не много по времени, ютуб же обычно предлагает рандомно людям посмотреть, глядите и новые люди подтянутся, пройдут на канал, оценят контент, подпишутся, а так конечно Вам решать

    • @PythonRussian
      @PythonRussian  3 года назад

      @@user-do4nq3fr6t да я в принципе не против, просто получится что нас там полтора землекопа будет))) На какую тему? "Войти в айти"?

    • @user-do4nq3fr6t
      @user-do4nq3fr6t 3 года назад

      @@PythonRussian Live стрим, с акцентом конечно на python, в этом духе, посмотрите на сколько подписчики активны, да и новые думаю подтянутся, так то спроса за это не будет

  • @Rustik702
    @Rustik702 Год назад

    Как же я рад, что нашел Ваш канал! Большое Вам спасибо! Очень хорошо разжевали материал. Мне уже не первое Ваше видео заходит!
    Забыл, по теме ролика, я видел в курсе от Скиллбокса использование в listcomp конструкций вида [e if условие else e * e for e in range(5)]. Грубо говоря в фильтре условие и его невыполнение.
    Такой код допускается применять у нормальных пайтонистов или это - плохой код?

    • @PythonRussian
      @PythonRussian  Год назад +1

      вполне нормальный код, главное - действие или фильтр, вот если нет ни действий ни фильтрации то явно что-то не так. типичный неправильный пример [e for e in a_list]

  • @user-dn8bb3ii9d
    @user-dn8bb3ii9d 2 года назад

    супер

  • @Miron_MipoX
    @Miron_MipoX Год назад

    автор топ! лайк, подписка колокольчик)

  • @AdmiralUshakovvv
    @AdmiralUshakovvv 2 года назад +1

    нормас, да местами затянуто , но в целом ты хорош)
    стал лучше понимать тебя и глубже погружаться в тему

  • @kumushabdurahmanova7822
    @kumushabdurahmanova7822 2 года назад +2

    Недавно наткнулся на твой канал. Один из лучших на мой взгляд! Успехов
    P.S видел где-то как некоторое использовали вложенные listcomp. Будет ли разбор? А еще многие при print() используют что-то подобное(короткая запись). Будет ли разбор?

    • @PythonRussian
      @PythonRussian  2 года назад

      спасибо. Вложенные листкомпсы -в смысле когда 2 и более циклов внутри? Про принт не понял, есть пример?

    • @kumushabdurahmanova7822
      @kumushabdurahmanova7822 2 года назад

      @@PythonRussian
      import random
      n = 5
      m = 5
      a = [[random.randint(1, 6) for j in range(m)] for i in range(n)]
      for i in a:
      print(i)
      Вот код вложенного генератора. На курсе, который я проходил его не очень-то подробно разбирали(в том плане когда это используется, для чего и т.п)
      Про принт чуть позже скину

    • @kumushabdurahmanova7822
      @kumushabdurahmanova7822 2 года назад

      @@PythonRussian Про принт
      Задача:
      Слово или предложение на некотором языке называется панграммой, если в нем встречаются все символы алфавита этого языка хотя бы один раз. Панграммы часто используют в типографии для демонстрации шрифтов или тестирования средств вывода различных устройств.
      Вам дана строка, состоящая из маленьких и больших латинских букв. Проверьте, является ли эта строка панграммой. Считается, что строка содержит букву латинского алфавита, если эта буква встречается в верхнем или нижнем регистре.
      Вход:
      В первой строке записано одно целое число n (1 ≤ n ≤ 100) - количество символов в строке.
      Во второй строке записана сама строка. Строка содержит исключительно строчные и заглавные латинские буквы.
      Выход:
      Выведите «YES», если строка является панграммой, и «NO» в противном случае.
      Ответ одного из тех, кто решил задачу:
      print('NO' if int(input())

    • @PythonRussian
      @PythonRussian  2 года назад

      @@kumushabdurahmanova7822 так тут просто в принте тернарник. Это плохое решение, лучше разбить на несколько строк

    • @PythonRussian
      @PythonRussian  2 года назад

      @@kumushabdurahmanova7822 он редко используется, по сути если тебе нужны списки в списке.

  • @rpuropu
    @rpuropu 3 года назад

    всё-таки твой проходческий опыт крут, и развлечения, в виде разбора кодварз, уже не так хочется увидеть).. хотя я не знаю, каким получится исследование механики работы питона при разборе заданий там О_о... хмм.. вроде и тут супер важно, но если зарандомить направление для исследования кодварзом.. хз.. мне нравится то что ты выбираешь сам для своих роликов)

    • @PythonRussian
      @PythonRussian  3 года назад

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

  • @stevem4806
    @stevem4806 Год назад

    Спасибо за еще одно важное и понятное видео! Скажите, пожалуйста, в каком из ваших видео можно ознакомиться с работой данного выражения "if __name__ == '__main__'"?

    • @PythonRussian
      @PythonRussian  Год назад +1

      ruclips.net/video/RG8dobvf6kE/видео.html

    • @stevem4806
      @stevem4806 Год назад

      @@PythonRussian Благодарю!

  • @IlyaIlya_lopkop
    @IlyaIlya_lopkop 3 года назад +4

    Спасибо, очень информативно! Но что означают эти нижние подчеркивания 10_000_000_000?

    • @PythonRussian
      @PythonRussian  3 года назад +7

      это просто для отделения разрядов числа, так легче читается, когда число большое, писать их необязательно, но питон позволяет. То есть в данном случае сразу видно что 10 миллиардов, читается легче, чем если бы ноли шли все подряд.

  • @myacc2517
    @myacc2517 5 месяцев назад

    Можете, пожалуйста ,привести пару примеров list comps'ов именно рабочих? И пригождались ли другие компсы ?

    • @PythonRussian
      @PythonRussian  5 месяцев назад

      не понимаю что значит "рабочих"? в работе пригождаются постоянно. Например получить ИНН всех организаций из Москвы [client.inn for client in clients if client.location == 'Moscow'] Кроме генэксп и листкомпс чаще всего пригождается дикт-компс, сет совсем редко.

    • @myacc2517
      @myacc2517 5 месяцев назад

      @@PythonRussian Спасибо за ответ! Имел в виду примеры с работы. Вы ответили на мой вопрос в принципе, теперь понятнее стало. Во всех примерах, которые я видел, использовались только числа. А самому фантазии не хватало придумать другие варианты использования.

  • @user-js3yt8lg7o
    @user-js3yt8lg7o 3 года назад

    спасибо, а вы могли бы сказать зачем использовать yield в функциях?как я понял это тоже genexp...

    • @PythonRussian
      @PythonRussian  3 года назад +2

      это уже функция-генератор, я их упоминаю в самом начале видео. Это тоже крутая вещь, о которой стоит поговорить отдельно, там много особенностей.

    • @user-js3yt8lg7o
      @user-js3yt8lg7o 3 года назад

      @@PythonRussian спасибо за ответ

  • @mrmedbedb1256
    @mrmedbedb1256 2 года назад

    Блин....Где б проверить генераторы...Давно уже о них знаю, но всё никак не могу в проекте найти место, куда воткнуть.

    • @PythonRussian
      @PythonRussian  2 года назад +1

      скачай или негенери себе файл с логами, размером больше оперативки -и попробуй найти а нем строки с ошибкой или определенной датой.

    • @mrmedbedb1256
      @mrmedbedb1256 2 года назад

      @@PythonRussian нашёл два места, где их логически неплохо было бы вставить. Подскажи, как спец, применимы ли они в каком-то из случаев?
      1. Нужно читать чужой лог. Он идёт одной строкой, делить можно по
      , но читать его нужно в обратном порядке через reversed до первого совпадения.
      2. Есть база картинок в дампе в словаре в виде {str: np_array}.
      Спасибо :)

  • @Laserball74
    @Laserball74 Год назад

    будь добр объясни для чего ты пишешь if __name__ =='__main' когда пайчарм и так запустит твой код?

    • @PythonRussian
      @PythonRussian  Год назад +1

      это хорошая привычка -писать код в функциях (а не просто навалом в модуле) и запускать через мейн, тогда не получишь неожиданностей при импорте кода. По мейн у меня есть отдельное видео.

  • @user-me8nu1eu8u
    @user-me8nu1eu8u 2 года назад

    Онлайн тесты не при помощи объекта генератора пишутся случайно ?

  • @Akkaunt__Yerjan
    @Akkaunt__Yerjan 10 месяцев назад +1

    Один- качество мутное на смартфонене настроишь, не смог, нет доступа, попробую через компьютер

    • @PythonRussian
      @PythonRussian  10 месяцев назад +1

      да, я целился в просмотр на компе а не телефоне, но у меня даже на ноуте норм все видно

  • @user-zh7ni2to5o
    @user-zh7ni2to5o 3 года назад +1

    В тексте проскакивают периодически упоминания литературы. Если не трудно, пишите, в какой книге можно прочесть более подробно про затронутую в видео тему (прямо в описании). Это очень поможет, поскольку литературы сейчас много, а хорошей крайне мало.
    Касательно контента - качество (с точки зрения образовательной функции) гораздо, ГОРАЗДО лучше чем в большинстве аналогов.

    • @PythonRussian
      @PythonRussian  3 года назад

      У меня есть вот такое видео про обучение и литературу (под ним есть книги) ruclips.net/video/lMZn1Kj2RfE/видео.html. если же коротко то рекомендую(не считая собственно документации) - Марк Лутц, Дэвид Бизли, Лучиано Ромальо, Миша Горелик. Наверное самое полное и интересное из того что читал по питону. Думаю все мои темы есть у Лутца, я предпочитаю давать ссылку на доку. Дело в том что книги есть в переводе и разных изданий, потому просто сказать мол глава такая то или страница -не прокатит.

    • @user-zh7ni2to5o
      @user-zh7ni2to5o 3 года назад +1

      @@PythonRussian я уже посмотрел, спасибо. Но я имел в виду не только питон. А допустим, если речь идёт про классы, или про нейросеть, или про алгоритмы, или про что-то еще, то помимо реализации на питоне есть фундаментальные вещи, которые в рамках видео не осветить, из-за объёма. И было бы супер услышать рекомендацию литературы по этим фундаментальным вещам. (У вас, как видно из того ролика, библиотека вполне солидная. :)

    • @PythonRussian
      @PythonRussian  3 года назад

      @@user-zh7ni2to5o ага, понял, учту

  • @krolik_samurai
    @krolik_samurai Год назад +3

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

  • @user-mk6yf4lu3p
    @user-mk6yf4lu3p 8 месяцев назад

    Просьба к автору! обрати внимание на размер текста на видео. Очень тяжко воспринимать контент не на большом мониторе. Когда текст кода занимает 5-10 процентов от всего размера экрана это трудно смотреть. Просьба увеличивать размер текста..Будем признательны...

    • @PythonRussian
      @PythonRussian  8 месяцев назад +1

      в последних увеличено и звук лучше, а это старые видео

    • @user-mk6yf4lu3p
      @user-mk6yf4lu3p 8 месяцев назад

      @@PythonRussian Спасибо..подсел на ваши видосы...Было бы круто с вашим подходом делать видосы на тему алгоритмов..Графы-деревья итд..

  • @databox4279
    @databox4279 Месяц назад +1

    Кто тот один обиженный, что поставил дизлайк?

    • @PythonRussian
      @PythonRussian  Месяц назад

      на самом деле критиков немало и это вполне нормально - невозможно нравиться всем.

  • @dmitrywebsmith4031
    @dmitrywebsmith4031 Год назад +1

    видео нечитабельное, очень низкое качество картинки

  • @artemfediai7206
    @artemfediai7206 6 месяцев назад

    range само генератор. Нечего его пихать в чужой генератор