Основное оружие питониста: 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
Комментарий для тех, кого отпугивает большой хронометраж видео - каждая минута приближает вас к пониманию материала. "Вода" в видео отсутствует, всё подробно объяснено и разобрано на примерах, проговорен каждый нюанс! В более коротких роликах других авторов на данную тему чего-то не хватает для полного понимания. Получил не только знания, но и удовольствие от просмотра видео, спасибо автору!!!
Автор просто маэстро знания и слова!
Получилось очень круто подробно и понятно! Спасибо!
Единственный человек, который может объяснить по человечески и пусть иной раз, как маленьким детям разжевывает (когда мы что-то новое изучаем, мы они и есть)
Пересмотрел много туториалов, но было ощущение , что набрал по верхам и не особо вник в тему, а тут прям как ПОНЯЛ, еле унес!) И такое ощущение было по многим темам автора.
Очень удивлен малому количеству подписчиков.
Жаль, что в последнее время не так много уроков делаете у вас отлично получается учить и объяснять.
С меня, просмотр всех видео и лайк под каждым. (не факт, что с новой политикой ютуба это что-то даст, но это будет моя благодарность Вам за проделанный не легкий труд)
спасибо за добрые слова, благодаря таким комментам и продолжаю снимать видео=) Да, вы правы, редко снимаю сейчас, нет времени совсем -дом, семья, работа. Надо по ООП продолжать, полагаю вот отпуск придет и поснимаю от души. Но это не точно =)
Поддерживаю. Прохожу курс на Udemy, но когда что то не ясно иду на этот канал за разьяснениями. Смотрю Егорова иногда и ничего не могу понять, иду сюда и все ясно и просто. В общем вы отлично объясняете. Жаль что видео на канале мало
А где платная подписка?
Всегда ленюсь писать комментарии.., но точно так же думаю об этом канале и его авторе. Именно.
Пожалуй, лучшее объяснение, которое я встречал.
Очень хорошо, что в микромоментах вы пока озвучиваете что будете делать, а потом делаете. Это дает возможность услышать задачу, поставить на паузу, попробовать самому и потом проверить себя же)
Спасибо за видео, в курсе, который прохожу, не поняла, зачем в итоге нужен генератор и с чем его едят, теперь стало понятнее и появилась мотивация лучше проработать эту тему
Ну прям как на тарелочке всё изложено!!! Респект! Лайк однозначно!
Одновременно: Ваше видео , Лутц и Однострочниики в Python/ Последняя слишком узко, но наверное кому то прямо в тему. Лутц - классика для спокойного прочтения с комп под рукой. Ваше - быстро и информативно. Всегда с удовольствием гляжу канал
Спасибо Вам за Ваши видео
Спасибо за урок. Всё чётко и понятно.
Спасибо за урок. Отлично и подробно все рассказано
Спасибо. Очень толково и полезно.
отличный урок, 5+
Спасибо за видео, замечательное объяснение сути, это на мое мнение лучшая подача информации
Класс, вообще не жалею что зашёл посмотреть видео, так как я знал про listcomps и genexp(я думал что всё про них знаю), но я ошибался. В общем много различных фич и крутая информация!
спасибо
Большое спасибо автору! Отличная лекция! Все изложено очень просто и понятно, как раз, для начинающих!
Большое спасибо! прохожу курсы по питону. Информация на канале очень помогает понять как глобальные вещи, так и ньюансы. Пожалуйста, продолжай. Если бы было бусти или что то типо того обязательно бы подписался!
Спасибо за ваши видео. Очень помогают.
Вариант с матрицей и ее выводом без pprint на 18й минуте:
___
matrix = [[col for col in range(3)] for row in range(3)]
for row in matrix:
print(row)
-----
*источник: DataCamp
Автор молодец! спасибо
Спасибо огромное Вам за эти видео! Я прямо совсем новичёк в питонячих делах (занимался только программированием PLC на МЭК 6-1131/3), но то, как вы передаёте материал даже до меня доходит! 😁 По возможности буду поддерживать канал финансово). Очень надеюсь, что Вы будете развивать канал. Такого годного и понятного контента крайне мало на просторах интернета.
спасибо, развивать конечно будем, по времени только не очень быстро получается, попытаюсь в новогодние праздники наверстать.
Благодарочка.
Обожаю книги и подход "для чайников". Спасибо за работу
👍, пишу на js, но не завидую))) Но прикольно, конечно.
спасибо, отличный урок...
хотелось бы еще увидеть ваше видео про рекурсию
я просто не совсем понимаю что про рекурсию рассказывать, но подумаю
@@PythonRussian для новичков очень тяжелая и непонятная тема...
опытные программисты говорят, что можно разделить на 2 категории - те, кто ее ненавидят и те, кто рекурсию поняли, и постоянно ее применяют...и рекурсия ускоряет экономит много времени, хотя и можно обойтись и без рекурсии описав код циклами
Я вот много посмотрел видео про рекурсию - и вот вроде понял, а применять даже в написании простеньких задач не могу - впадаю в ступор... оказалось - не я один такой
Хотелось бы увидеть ваше объяснение - уж больно круто - доходчиво, понятно, что как и где ....
Если честно я рад что наткнулся на Ваш канал, много нужного поясняете, может как нибудь стрим тестовый сделаете? Ну так, просто побеседовать для начала, не долго, может какое то направление образуется, и что то из этого всего получится в будущем.
так нас тут всего ничего, вот дорастем хотя бы до 1000 тогда можно что-то в этом роде, побеседовать о разных темах. Мысль неплохая
@@PythonRussian всё же предлагаю провести тестовый стрим, не много по времени, ютуб же обычно предлагает рандомно людям посмотреть, глядите и новые люди подтянутся, пройдут на канал, оценят контент, подпишутся, а так конечно Вам решать
@@user-do4nq3fr6t да я в принципе не против, просто получится что нас там полтора землекопа будет))) На какую тему? "Войти в айти"?
@@PythonRussian Live стрим, с акцентом конечно на python, в этом духе, посмотрите на сколько подписчики активны, да и новые думаю подтянутся, так то спроса за это не будет
Как же я рад, что нашел Ваш канал! Большое Вам спасибо! Очень хорошо разжевали материал. Мне уже не первое Ваше видео заходит!
Забыл, по теме ролика, я видел в курсе от Скиллбокса использование в listcomp конструкций вида [e if условие else e * e for e in range(5)]. Грубо говоря в фильтре условие и его невыполнение.
Такой код допускается применять у нормальных пайтонистов или это - плохой код?
вполне нормальный код, главное - действие или фильтр, вот если нет ни действий ни фильтрации то явно что-то не так. типичный неправильный пример [e for e in a_list]
супер
автор топ! лайк, подписка колокольчик)
нормас, да местами затянуто , но в целом ты хорош)
стал лучше понимать тебя и глубже погружаться в тему
Недавно наткнулся на твой канал. Один из лучших на мой взгляд! Успехов
P.S видел где-то как некоторое использовали вложенные listcomp. Будет ли разбор? А еще многие при print() используют что-то подобное(короткая запись). Будет ли разбор?
спасибо. Вложенные листкомпсы -в смысле когда 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)
Вот код вложенного генератора. На курсе, который я проходил его не очень-то подробно разбирали(в том плане когда это используется, для чего и т.п)
Про принт чуть позже скину
@@PythonRussian Про принт
Задача:
Слово или предложение на некотором языке называется панграммой, если в нем встречаются все символы алфавита этого языка хотя бы один раз. Панграммы часто используют в типографии для демонстрации шрифтов или тестирования средств вывода различных устройств.
Вам дана строка, состоящая из маленьких и больших латинских букв. Проверьте, является ли эта строка панграммой. Считается, что строка содержит букву латинского алфавита, если эта буква встречается в верхнем или нижнем регистре.
Вход:
В первой строке записано одно целое число n (1 ≤ n ≤ 100) - количество символов в строке.
Во второй строке записана сама строка. Строка содержит исключительно строчные и заглавные латинские буквы.
Выход:
Выведите «YES», если строка является панграммой, и «NO» в противном случае.
Ответ одного из тех, кто решил задачу:
print('NO' if int(input())
@@kumushabdurahmanova7822 так тут просто в принте тернарник. Это плохое решение, лучше разбить на несколько строк
@@kumushabdurahmanova7822 он редко используется, по сути если тебе нужны списки в списке.
всё-таки твой проходческий опыт крут, и развлечения, в виде разбора кодварз, уже не так хочется увидеть).. хотя я не знаю, каким получится исследование механики работы питона при разборе заданий там О_о... хмм.. вроде и тут супер важно, но если зарандомить направление для исследования кодварзом.. хз.. мне нравится то что ты выбираешь сам для своих роликов)
ну когда я запишу всю запланированную серию роликов, можно будет подумать куда дальше, планов то много, времени нет.
Спасибо за еще одно важное и понятное видео! Скажите, пожалуйста, в каком из ваших видео можно ознакомиться с работой данного выражения "if __name__ == '__main__'"?
ruclips.net/video/RG8dobvf6kE/видео.html
@@PythonRussian Благодарю!
Спасибо, очень информативно! Но что означают эти нижние подчеркивания 10_000_000_000?
это просто для отделения разрядов числа, так легче читается, когда число большое, писать их необязательно, но питон позволяет. То есть в данном случае сразу видно что 10 миллиардов, читается легче, чем если бы ноли шли все подряд.
Можете, пожалуйста ,привести пару примеров list comps'ов именно рабочих? И пригождались ли другие компсы ?
не понимаю что значит "рабочих"? в работе пригождаются постоянно. Например получить ИНН всех организаций из Москвы [client.inn for client in clients if client.location == 'Moscow'] Кроме генэксп и листкомпс чаще всего пригождается дикт-компс, сет совсем редко.
@@PythonRussian Спасибо за ответ! Имел в виду примеры с работы. Вы ответили на мой вопрос в принципе, теперь понятнее стало. Во всех примерах, которые я видел, использовались только числа. А самому фантазии не хватало придумать другие варианты использования.
спасибо, а вы могли бы сказать зачем использовать yield в функциях?как я понял это тоже genexp...
это уже функция-генератор, я их упоминаю в самом начале видео. Это тоже крутая вещь, о которой стоит поговорить отдельно, там много особенностей.
@@PythonRussian спасибо за ответ
Блин....Где б проверить генераторы...Давно уже о них знаю, но всё никак не могу в проекте найти место, куда воткнуть.
скачай или негенери себе файл с логами, размером больше оперативки -и попробуй найти а нем строки с ошибкой или определенной датой.
@@PythonRussian нашёл два места, где их логически неплохо было бы вставить. Подскажи, как спец, применимы ли они в каком-то из случаев?
1. Нужно читать чужой лог. Он идёт одной строкой, делить можно по
, но читать его нужно в обратном порядке через reversed до первого совпадения.
2. Есть база картинок в дампе в словаре в виде {str: np_array}.
Спасибо :)
будь добр объясни для чего ты пишешь if __name__ =='__main' когда пайчарм и так запустит твой код?
это хорошая привычка -писать код в функциях (а не просто навалом в модуле) и запускать через мейн, тогда не получишь неожиданностей при импорте кода. По мейн у меня есть отдельное видео.
Онлайн тесты не при помощи объекта генератора пишутся случайно ?
не знаю =)
Один- качество мутное на смартфонене настроишь, не смог, нет доступа, попробую через компьютер
да, я целился в просмотр на компе а не телефоне, но у меня даже на ноуте норм все видно
В тексте проскакивают периодически упоминания литературы. Если не трудно, пишите, в какой книге можно прочесть более подробно про затронутую в видео тему (прямо в описании). Это очень поможет, поскольку литературы сейчас много, а хорошей крайне мало.
Касательно контента - качество (с точки зрения образовательной функции) гораздо, ГОРАЗДО лучше чем в большинстве аналогов.
У меня есть вот такое видео про обучение и литературу (под ним есть книги) ruclips.net/video/lMZn1Kj2RfE/видео.html. если же коротко то рекомендую(не считая собственно документации) - Марк Лутц, Дэвид Бизли, Лучиано Ромальо, Миша Горелик. Наверное самое полное и интересное из того что читал по питону. Думаю все мои темы есть у Лутца, я предпочитаю давать ссылку на доку. Дело в том что книги есть в переводе и разных изданий, потому просто сказать мол глава такая то или страница -не прокатит.
@@PythonRussian я уже посмотрел, спасибо. Но я имел в виду не только питон. А допустим, если речь идёт про классы, или про нейросеть, или про алгоритмы, или про что-то еще, то помимо реализации на питоне есть фундаментальные вещи, которые в рамках видео не осветить, из-за объёма. И было бы супер услышать рекомендацию литературы по этим фундаментальным вещам. (У вас, как видно из того ролика, библиотека вполне солидная. :)
@@user-zh7ni2to5o ага, понял, учту
Комент шобэ лишний раз пнуть алгоритмы ютуба, да бы они оторвали уже свои ленивые задницы от стула и начали продвигать данный канал, ведут себя как генераторы чесслово
Просьба к автору! обрати внимание на размер текста на видео. Очень тяжко воспринимать контент не на большом мониторе. Когда текст кода занимает 5-10 процентов от всего размера экрана это трудно смотреть. Просьба увеличивать размер текста..Будем признательны...
в последних увеличено и звук лучше, а это старые видео
@@PythonRussian Спасибо..подсел на ваши видосы...Было бы круто с вашим подходом делать видосы на тему алгоритмов..Графы-деревья итд..
Кто тот один обиженный, что поставил дизлайк?
на самом деле критиков немало и это вполне нормально - невозможно нравиться всем.
видео нечитабельное, очень низкое качество картинки
range само генератор. Нечего его пихать в чужой генератор