4 совета как ЛУЧШЕ писать циклы For на Python

preview_player
Показать описание

4 совета для написания лучших циклов For на Python.
В этом видео мы рассмотрим практические примеры циклов for, и их альтернативные решения, которые будут работать намного быстрее, и при этом сделают ваш код чище.

Мы рассмотрим примеры с enumerate, zip, list comprehension и генераторами Python, и сделаем тесты производительности с примерами байт-кода.

Рекомендации по теме
Комментарии
Автор

На мой взгляд - если чел использует цикл 'For' вместо 'Sum' то это просто незнание встроенных команд / функций и т.д.

_M.i.h.a.i.l._
Автор

В книге «питон.Чистый код» посвящена была эта тема, а функции zip() в первые увидел в книге «Однострочники Питон»
Очень маленькие детали!Очень рад, что автор показывает их
Было бы еще интереснее, если ты показал как итераторы работают, создав свой класс(протокол итераторов)

berlin
Автор

Затраты памяти ещё сравните у функций с генератором и с листом в 4 примере

splinter
Автор

Не используйте таймер как замер скорости, во 1х это показывает что разницу во времени только на вашей конфигурации, во 2х даже если вы запустите 2 раза или более значения будут отличаться, так как слишком много от чего будет зависеть время выполнения(например в данный момент при замере первого алгоритма у вас был простой а при замере второго алгоритма ос полезла проверять обновления или ещё че и все уже не достоверное отличие). Лучше поищите информацию как замерить сложность алгоритма в Пайтон.

WertiGo
Автор

Лучший! Спасибо за качественный контент

johnjonson
Автор

первая задача res = n * (n + 1) // 2 я понимаю что не тема ролика, но молодому программисту обязательно нужно повторять что программист это в первую очередь умный человек который оптимизирует свои алгоритмы поиска решения.

MrPalianytsia
Автор

Отличная подача, подписался на канал!

etwnkbg
Автор

Если вам нужна производительность очень советую посмотреть в сторону numpy. Разница порой набирается на целый порядок

arthurkhisamov
Автор

Спасибо, я очень рад, обьяснение прекрасно.

marekplisiecki
Автор

на первой минуте звучит фраза, что sum - принимает итератор, что абсолютно не верно. sum - принимает iterable, т.е итерируемый объект.

tamirlanmakhov
Автор

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

non
Автор

У меня есть 2 функции для деления текста на страницы.
обрезание страницы было реализовано через цикл фор как раз по индексам.
Заменил рейндж лен на енумерейт время выполнения функции возросло в 2 раза

__init__.
Автор

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

mak
Автор

А почему бы не использовать filter + map + sum вместо list comprehension + sum и generator + sum?

metasy_
Автор

А в зависимости от железа один и тот же код, например на разных процессорах может выполняться разное время? Например процессоры с разными наборами инструкции?

tdwbpqv
Автор

На 4:25 сначала один байт код enumirate, а в следующем кадре уже сравнивается с другим байткодом. При этом если сравнить первоначально показанный байткод, то для enumirate это 5 инструкций, а для for это всего 3, если считать от FOR_ITER до JUMP_BACKWARD. Интересно было бы сравнить enumirate с простым циклом for num in numbers с инкремент внутри переменной счётчика i объявленной вне цикла.

rusnickk
Автор

Спасибо за видео, хоть и знал про эти методы, но лишним не будет. Про zip вообще уже забыл, когда изучал python пару раз использовал, с тех пор вообще о нем забыл. И кстати в следующий раз декоратор для замера времени используй, чтобы меньше кода было, просто не все сразу поймут просматривая это. А так все чётко.

ismailisabekov
Автор

Еще можно сократить код немного и вместо `numbers = [num for num in range(1_000_000)]` писать `numbers = range(1_000_000)`
Но в первом случае тип объекта list, а во втором range, если нужен list, то просто надо написать так `numbers = list(range(1_000_000))`
Не знаю как это с точки зрения производительности, но по клавишам вы нажимаете меньше, спасибо за внимание)

etwbsnc
Автор

Привет. Можно спросить не по теме видео?) Я вот пытаюсь парсить крипто сайты, но содержимое формирует JS код. Подскажи куда двигаться, чтобы максимально быстро захватить результат. Пробовал requests-html использовать, но после рендера результат тот же (без подгружаемого контента).

Haponenko_Vadym
Автор

Спасибо большое за информацию я только только начинаю спасибо

vwtjjuw