Тёмный

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

Python Russian
Подписаться 16 тыс.
Просмотров 11 тыс.
50% 1

Рассмотрим обязательные для понимания и использования киллер-фичи 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

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

 

8 фев 2021

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 83   
@germanborisov1765
@germanborisov1765 Год назад
Комментарий для тех, кого отпугивает большой хронометраж видео - каждая минута приближает вас к пониманию материала. "Вода" в видео отсутствует, всё подробно объяснено и разобрано на примерах, проговорен каждый нюанс! В более коротких роликах других авторов на данную тему чего-то не хватает для полного понимания. Получил не только знания, но и удовольствие от просмотра видео, спасибо автору!!!
@za_rekoi
@za_rekoi Месяц назад
Автор просто маэстро знания и слова!
@likeclockwork9600
@likeclockwork9600 2 года назад
Единственный человек, который может объяснить по человечески и пусть иной раз, как маленьким детям разжевывает (когда мы что-то новое изучаем, мы они и есть) Пересмотрел много туториалов, но было ощущение , что набрал по верхам и не особо вник в тему, а тут прям как ПОНЯЛ, еле унес!) И такое ощущение было по многим темам автора. Очень удивлен малому количеству подписчиков. Жаль, что в последнее время не так много уроков делаете у вас отлично получается учить и объяснять. С меня, просмотр всех видео и лайк под каждым. (не факт, что с новой политикой ютуба это что-то даст, но это будет моя благодарность Вам за проделанный не легкий труд)
@PythonRussian
@PythonRussian 2 года назад
спасибо за добрые слова, благодаря таким комментам и продолжаю снимать видео=) Да, вы правы, редко снимаю сейчас, нет времени совсем -дом, семья, работа. Надо по ООП продолжать, полагаю вот отпуск придет и поснимаю от души. Но это не точно =)
@kostiantyn8378
@kostiantyn8378 Год назад
Поддерживаю. Прохожу курс на Udemy, но когда что то не ясно иду на этот канал за разьяснениями. Смотрю Егорова иногда и ничего не могу понять, иду сюда и все ясно и просто. В общем вы отлично объясняете. Жаль что видео на канале мало
@barma1309
@barma1309 Год назад
А где платная подписка?
@MikeDev-Sooworr
@MikeDev-Sooworr 4 месяца назад
Всегда ленюсь писать комментарии.., но точно так же думаю об этом канале и его авторе. Именно.
@ft.6518
@ft.6518 11 месяцев назад
Очень хорошо, что в микромоментах вы пока озвучиваете что будете делать, а потом делаете. Это дает возможность услышать задачу, поставить на паузу, попробовать самому и потом проверить себя же)
@user-nj2ud4yz5u
@user-nj2ud4yz5u Месяц назад
Получилось очень круто подробно и понятно! Спасибо!
@user-ed6qc1pn5o
@user-ed6qc1pn5o 3 месяца назад
Пожалуй, лучшее объяснение, которое я встречал.
@user-vr8qy4yg8n
@user-vr8qy4yg8n 8 месяцев назад
Спасибо за видео, в курсе, который прохожу, не поняла, зачем в итоге нужен генератор и с чем его едят, теперь стало понятнее и появилась мотивация лучше проработать эту тему
@user-vm5kf3bp3s
@user-vm5kf3bp3s 2 года назад
Одновременно: Ваше видео , Лутц и Однострочниики в Python/ Последняя слишком узко, но наверное кому то прямо в тему. Лутц - классика для спокойного прочтения с комп под рукой. Ваше - быстро и информативно. Всегда с удовольствием гляжу канал
@mynameistailz6845
@mynameistailz6845 2 года назад
Спасибо за урок. Всё чётко и понятно.
@voila2000
@voila2000 3 года назад
Спасибо. Очень толково и полезно.
@sevakvart1111
@sevakvart1111 3 года назад
отличный урок, 5+
@Vladimir-bz9tg
@Vladimir-bz9tg Год назад
Спасибо Вам за Ваши видео
@user-kw9gx6dd2x
@user-kw9gx6dd2x 2 года назад
Ну прям как на тарелочке всё изложено!!! Респект! Лайк однозначно!
@pfw4517
@pfw4517 Год назад
Спасибо огромное Вам за эти видео! Я прямо совсем новичёк в питонячих делах (занимался только программированием PLC на МЭК 6-1131/3), но то, как вы передаёте материал даже до меня доходит! 😁 По возможности буду поддерживать канал финансово). Очень надеюсь, что Вы будете развивать канал. Такого годного и понятного контента крайне мало на просторах интернета.
@PythonRussian
@PythonRussian Год назад
спасибо, развивать конечно будем, по времени только не очень быстро получается, попытаюсь в новогодние праздники наверстать.
@user-gc4ic9xc1j
@user-gc4ic9xc1j Год назад
Спасибо за видео, замечательное объяснение сути, это на мое мнение лучшая подача информации
@user-ch2oe7lu1x
@user-ch2oe7lu1x 3 года назад
Класс, вообще не жалею что зашёл посмотреть видео, так как я знал про listcomps и genexp(я думал что всё про них знаю), но я ошибался. В общем много различных фич и крутая информация!
@PythonRussian
@PythonRussian 3 года назад
спасибо
@jackhopckien4566
@jackhopckien4566 7 месяцев назад
Спасибо за урок. Отлично и подробно все рассказано
@user-wv6mj4iz1y
@user-wv6mj4iz1y Год назад
Большое спасибо автору! Отличная лекция! Все изложено очень просто и понятно, как раз, для начинающих!
@fedordostoevskiy4209
@fedordostoevskiy4209 Год назад
👍, пишу на js, но не завидую))) Но прикольно, конечно.
@SoloveY1990
@SoloveY1990 Год назад
Большое спасибо! прохожу курсы по питону. Информация на канале очень помогает понять как глобальные вещи, так и ньюансы. Пожалуйста, продолжай. Если бы было бусти или что то типо того обязательно бы подписался!
@y18kotov
@y18kotov Год назад
Автор молодец! спасибо
@data19101988
@data19101988 Год назад
Обожаю книги и подход "для чайников". Спасибо за работу
@kochcubing
@kochcubing Год назад
Спасибо за ваши видео. Очень помогают. Вариант с матрицей и ее выводом без pprint на 18й минуте: ___ matrix = [[col for col in range(3)] for row in range(3)] for row in matrix: print(row) ----- *источник: DataCamp
@za_rekoi
@za_rekoi Месяц назад
Благодарочка.
@Miron_MipoX
@Miron_MipoX Год назад
автор топ! лайк, подписка колокольчик)
@themarineussr2011
@themarineussr2011 Год назад
спасибо, отличный урок... хотелось бы еще увидеть ваше видео про рекурсию
@PythonRussian
@PythonRussian Год назад
я просто не совсем понимаю что про рекурсию рассказывать, но подумаю
@themarineussr2011
@themarineussr2011 Год назад
@@PythonRussian для новичков очень тяжелая и непонятная тема... опытные программисты говорят, что можно разделить на 2 категории - те, кто ее ненавидят и те, кто рекурсию поняли, и постоянно ее применяют...и рекурсия ускоряет экономит много времени, хотя и можно обойтись и без рекурсии описав код циклами Я вот много посмотрел видео про рекурсию - и вот вроде понял, а применять даже в написании простеньких задач не могу - впадаю в ступор... оказалось - не я один такой Хотелось бы увидеть ваше объяснение - уж больно круто - доходчиво, понятно, что как и где ....
@user-dn8bb3ii9d
@user-dn8bb3ii9d 2 года назад
супер
@Rustik702
@Rustik702 Год назад
Как же я рад, что нашел Ваш канал! Большое Вам спасибо! Очень хорошо разжевали материал. Мне уже не первое Ваше видео заходит! Забыл, по теме ролика, я видел в курсе от Скиллбокса использование в listcomp конструкций вида [e if условие else e * e for e in range(5)]. Грубо говоря в фильтре условие и его невыполнение. Такой код допускается применять у нормальных пайтонистов или это - плохой код?
@PythonRussian
@PythonRussian Год назад
вполне нормальный код, главное - действие или фильтр, вот если нет ни действий ни фильтрации то явно что-то не так. типичный неправильный пример [e for e in a_list]
@AdmiralUshakovvv
@AdmiralUshakovvv 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, в этом духе, посмотрите на сколько подписчики активны, да и новые думаю подтянутся, так то спроса за это не будет
@kumushabdurahmanova7822
@kumushabdurahmanova7822 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 он редко используется, по сути если тебе нужны списки в списке.
@IlyaIlya_lopkop
@IlyaIlya_lopkop 3 года назад
Спасибо, очень информативно! Но что означают эти нижние подчеркивания 10_000_000_000?
@PythonRussian
@PythonRussian 3 года назад
это просто для отделения разрядов числа, так легче читается, когда число большое, писать их необязательно, но питон позволяет. То есть в данном случае сразу видно что 10 миллиардов, читается легче, чем если бы ноли шли все подряд.
@rpuropu
@rpuropu 3 года назад
всё-таки твой проходческий опыт крут, и развлечения, в виде разбора кодварз, уже не так хочется увидеть).. хотя я не знаю, каким получится исследование механики работы питона при разборе заданий там О_о... хмм.. вроде и тут супер важно, но если зарандомить направление для исследования кодварзом.. хз.. мне нравится то что ты выбираешь сам для своих роликов)
@PythonRussian
@PythonRussian 3 года назад
ну когда я запишу всю запланированную серию роликов, можно будет подумать куда дальше, планов то много, времени нет.
@stevem4806
@stevem4806 Год назад
Спасибо за еще одно важное и понятное видео! Скажите, пожалуйста, в каком из ваших видео можно ознакомиться с работой данного выражения "if __name__ == '__main__'"?
@PythonRussian
@PythonRussian Год назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-RG8dobvf6kE.html
@stevem4806
@stevem4806 Год назад
@@PythonRussian Благодарю!
@myacc2517
@myacc2517 6 месяцев назад
Можете, пожалуйста ,привести пару примеров list comps'ов именно рабочих? И пригождались ли другие компсы ?
@PythonRussian
@PythonRussian 6 месяцев назад
не понимаю что значит "рабочих"? в работе пригождаются постоянно. Например получить ИНН всех организаций из Москвы [client.inn for client in clients if client.location == 'Moscow'] Кроме генэксп и листкомпс чаще всего пригождается дикт-компс, сет совсем редко.
@myacc2517
@myacc2517 6 месяцев назад
@@PythonRussian Спасибо за ответ! Имел в виду примеры с работы. Вы ответили на мой вопрос в принципе, теперь понятнее стало. Во всех примерах, которые я видел, использовались только числа. А самому фантазии не хватало придумать другие варианты использования.
@user-js3yt8lg7o
@user-js3yt8lg7o 3 года назад
спасибо, а вы могли бы сказать зачем использовать yield в функциях?как я понял это тоже genexp...
@PythonRussian
@PythonRussian 3 года назад
это уже функция-генератор, я их упоминаю в самом начале видео. Это тоже крутая вещь, о которой стоит поговорить отдельно, там много особенностей.
@user-js3yt8lg7o
@user-js3yt8lg7o 3 года назад
@@PythonRussian спасибо за ответ
@Laserball74
@Laserball74 Год назад
будь добр объясни для чего ты пишешь if __name__ =='__main' когда пайчарм и так запустит твой код?
@PythonRussian
@PythonRussian Год назад
это хорошая привычка -писать код в функциях (а не просто навалом в модуле) и запускать через мейн, тогда не получишь неожиданностей при импорте кода. По мейн у меня есть отдельное видео.
@user-me8nu1eu8u
@user-me8nu1eu8u 2 года назад
Онлайн тесты не при помощи объекта генератора пишутся случайно ?
@PythonRussian
@PythonRussian 2 года назад
не знаю =)
@user-zh7ni2to5o
@user-zh7ni2to5o 3 года назад
В тексте проскакивают периодически упоминания литературы. Если не трудно, пишите, в какой книге можно прочесть более подробно про затронутую в видео тему (прямо в описании). Это очень поможет, поскольку литературы сейчас много, а хорошей крайне мало. Касательно контента - качество (с точки зрения образовательной функции) гораздо, ГОРАЗДО лучше чем в большинстве аналогов.
@PythonRussian
@PythonRussian 3 года назад
У меня есть вот такое видео про обучение и литературу (под ним есть книги) ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-lMZn1Kj2RfE.html. если же коротко то рекомендую(не считая собственно документации) - Марк Лутц, Дэвид Бизли, Лучиано Ромальо, Миша Горелик. Наверное самое полное и интересное из того что читал по питону. Думаю все мои темы есть у Лутца, я предпочитаю давать ссылку на доку. Дело в том что книги есть в переводе и разных изданий, потому просто сказать мол глава такая то или страница -не прокатит.
@user-zh7ni2to5o
@user-zh7ni2to5o 3 года назад
@@PythonRussian я уже посмотрел, спасибо. Но я имел в виду не только питон. А допустим, если речь идёт про классы, или про нейросеть, или про алгоритмы, или про что-то еще, то помимо реализации на питоне есть фундаментальные вещи, которые в рамках видео не осветить, из-за объёма. И было бы супер услышать рекомендацию литературы по этим фундаментальным вещам. (У вас, как видно из того ролика, библиотека вполне солидная. :)
@PythonRussian
@PythonRussian 3 года назад
@@user-zh7ni2to5o ага, понял, учту
@krolik_samurai
@krolik_samurai Год назад
Комент шобэ лишний раз пнуть алгоритмы ютуба, да бы они оторвали уже свои ленивые задницы от стула и начали продвигать данный канал, ведут себя как генераторы чесслово
@mrmedbedb1256
@mrmedbedb1256 2 года назад
Блин....Где б проверить генераторы...Давно уже о них знаю, но всё никак не могу в проекте найти место, куда воткнуть.
@PythonRussian
@PythonRussian 2 года назад
скачай или негенери себе файл с логами, размером больше оперативки -и попробуй найти а нем строки с ошибкой или определенной датой.
@mrmedbedb1256
@mrmedbedb1256 2 года назад
@@PythonRussian нашёл два места, где их логически неплохо было бы вставить. Подскажи, как спец, применимы ли они в каком-то из случаев? 1. Нужно читать чужой лог. Он идёт одной строкой, делить можно по , но читать его нужно в обратном порядке через reversed до первого совпадения. 2. Есть база картинок в дампе в словаре в виде {str: np_array}. Спасибо :)
@Akkaunt__Yerjan
@Akkaunt__Yerjan 11 месяцев назад
Один- качество мутное на смартфонене настроишь, не смог, нет доступа, попробую через компьютер
@PythonRussian
@PythonRussian 11 месяцев назад
да, я целился в просмотр на компе а не телефоне, но у меня даже на ноуте норм все видно
@user-mk6yf4lu3p
@user-mk6yf4lu3p 9 месяцев назад
Просьба к автору! обрати внимание на размер текста на видео. Очень тяжко воспринимать контент не на большом мониторе. Когда текст кода занимает 5-10 процентов от всего размера экрана это трудно смотреть. Просьба увеличивать размер текста..Будем признательны...
@PythonRussian
@PythonRussian 9 месяцев назад
в последних увеличено и звук лучше, а это старые видео
@user-mk6yf4lu3p
@user-mk6yf4lu3p 9 месяцев назад
@@PythonRussian Спасибо..подсел на ваши видосы...Было бы круто с вашим подходом делать видосы на тему алгоритмов..Графы-деревья итд..
@databox4279
@databox4279 2 месяца назад
Кто тот один обиженный, что поставил дизлайк?
@PythonRussian
@PythonRussian 2 месяца назад
на самом деле критиков немало и это вполне нормально - невозможно нравиться всем.
@dmitrywebsmith4031
@dmitrywebsmith4031 Год назад
видео нечитабельное, очень низкое качество картинки
@artemfediai7206
@artemfediai7206 7 месяцев назад
range само генератор. Нечего его пихать в чужой генератор
Далее
WoT Blitz. Late Night Birthday Lotto + Gifts and Presents
1:07:55
Кошка-ГОНЧАР #шортс #shorts
00:28
Просмотров 405 тыс.
Список и кортеж
37:46
Просмотров 4,1 тыс.
THE MOST FREQUENT MISCONCEPTIONS ABOUT OOP
19:37
Просмотров 542 тыс.
Замыкания (Closures) в Python
30:54
Просмотров 14 тыс.