Анализ производительности популярных подходов с бенчмарками часть 1
Интуитивные представления о производительности нередко бывают ошибочными. Python - язык с множеством способов решения одной задачи, и выбор правильного подхода может дать огромный прирост производительности. Давайте сравним некоторые распространенные операции с помощью простых бенчмарков.
Результаты могут удивить:
list comprehension стабильно показывает результаты на 15-20% лучше, чем
Разъяснивший Python
Интуитивные представления о производительности нередко бывают ошибочными. Python - язык с множеством способов решения одной задачи, и выбор правильного подхода может дать огромный прирост производительности. Давайте сравним некоторые распространенные операции с помощью простых бенчмарков.
Результаты могут удивить:
join обычно в 10-15 раз быстрее, чем последовательное использование оператора +. Причина проста - строки в Python неизменяемы, и каждая операция + создает новый объект.list comprehension стабильно показывает результаты на 15-20% лучше, чем
filter() с lambda-функцией. Однако этот разрыв может меняться в зависимости от сложности фильтрующей функции. Особенно впечатляет разница при доступе к элементам словаряРазъяснивший Python
Анализ производительности популярных подходов с бенчмарками часть 2
Метод
Но не всегда стандартные методы лучше. Например, при сортировке списков с пользовательским ключом, использование
Разъяснивший Python
Метод
dict.get() обычно работает примерно на 30-40% быстрее, чем явная проверка через if key in dict, и примерно в 2-3 раза быстрее, чем использование блока try-except.Но не всегда стандартные методы лучше. Например, при сортировке списков с пользовательским ключом, использование
operator.itemgetter() может быть на 10-15% быстрее lambda-функций.Разъяснивший Python
Функция проверки чисел на простоту
Оптимизированный алгоритм для проверки простоты числа.
В этом алгоритме я использую свойство, что все простые числа (кроме 2 и 3) можно представить в виде 6k ± 1. Это сокращает количество проверок примерно в 3 раза по сравнению с наивным перебором до квадратного корня.
Разъяснивший Python
Оптимизированный алгоритм для проверки простоты числа.
В этом алгоритме я использую свойство, что все простые числа (кроме 2 и 3) можно представить в виде 6k ± 1. Это сокращает количество проверок примерно в 3 раза по сравнению с наивным перебором до квадратного корня.
Разъяснивший Python
👎1
16 сентября в Arena Breakout: Infinite выходит седьмой сезон — «Утопия»
Если не сталкивались с игрой: это бесплатный тактический шутер про вылазки за добычей. Заходишь на локацию со своим снаряжением, набираешь лут и пытаешься уйти живым. Погиб — потерял всё, что было с собой.
Что завозят в новом сезоне:
• Заражённая зона — три карты превращаются в биоопасные локации с ночью, туманом и ливнем, по ним бродят шесть видов мутантов. Другие игроки при этом никуда не делись
• Режим на выживание — отдельный PvE без риска: снаряжение с собой не берёшь и ничего не теряешь, просто отбиваешься от волн и открываешь усиления
• Торговец прямо в рейде — можно обменять припасы и разведданные или докупить снаряжение
• Два новых ствола, сезонные обвесы и переработанная стрельба: дальность выше, попадания в голову ощутимее
• На старте бесплатно выдают прокачиваемую сапёрную лопату, скины и билеты, а между игроками разыгрывают 200 000 очков
Игра бесплатная, качается в Steam, российский регион поддерживается → https://abi.go.link/2wzTb
Если не сталкивались с игрой: это бесплатный тактический шутер про вылазки за добычей. Заходишь на локацию со своим снаряжением, набираешь лут и пытаешься уйти живым. Погиб — потерял всё, что было с собой.
Что завозят в новом сезоне:
• Заражённая зона — три карты превращаются в биоопасные локации с ночью, туманом и ливнем, по ним бродят шесть видов мутантов. Другие игроки при этом никуда не делись
• Режим на выживание — отдельный PvE без риска: снаряжение с собой не берёшь и ничего не теряешь, просто отбиваешься от волн и открываешь усиления
• Торговец прямо в рейде — можно обменять припасы и разведданные или докупить снаряжение
• Два новых ствола, сезонные обвесы и переработанная стрельба: дальность выше, попадания в голову ощутимее
• На старте бесплатно выдают прокачиваемую сапёрную лопату, скины и билеты, а между игроками разыгрывают 200 000 очков
Игра бесплатная, качается в Steam, российский регион поддерживается → https://abi.go.link/2wzTb
Алгоритм Евклида на Python
Алгоритм Евклида - элегантное решение для нахождения НОД
Расширенный алгоритм Евклида особенно полезен в криптографии и при решении линейных диофантовых уравнений. Я использовал его при реализации алгоритма RSA для учебного проекта.
Разъяснивший Python
Алгоритм Евклида - элегантное решение для нахождения НОД
Расширенный алгоритм Евклида особенно полезен в криптографии и при решении линейных диофантовых уравнений. Я использовал его при реализации алгоритма RSA для учебного проекта.
Разъяснивший Python
Функция для измерения времени выполнения кода
Отладка производительности - частая головная боль. Простой декоратор для измерения времени выполнения функций спасает в таких ситуациях.
Можно модифицировать этот декоратор, добавляя вывод аргументов функции или интеграцию с системой логирования проекта.
Разъяснивший Python
Отладка производительности - частая головная боль. Простой декоратор для измерения времени выполнения функций спасает в таких ситуациях.
Можно модифицировать этот декоратор, добавляя вывод аргументов функции или интеграцию с системой логирования проекта.
Разъяснивший Python
POST запросы и отправка данных
Обратите внимание на параметр
Разъяснивший Python
Обратите внимание на параметр
json= вместо data=. Он автоматически сериализует Python-словарь в JSON и устанавливает правильный заголовок Content-Type.Разъяснивший Python
Объяснение:
functools.wraps обновляет обёртку, копируя метаданные оригинальной функции (name, __doc__ и т.д.). Без wraps мы бы получили wrapper None. Важно использовать wraps для сохранения информации о функции, особенно при отладке и документации.
Разъяснивший Python
functools.wraps обновляет обёртку, копируя метаданные оригинальной функции (name, __doc__ и т.д.). Без wraps мы бы получили wrapper None. Важно использовать wraps для сохранения информации о функции, особенно при отладке и документации.
Разъяснивший Python
7 пакетов Python для анализа и улучшения кода
Чтобы помочь программистам преодолеть препятствия, существует множество полезных инструментов и пакетов Python, которые специально разработаны для анализа и улучшения кода. В этой статье автор рассматривает 7 таких.
Читать…
Разъяснивший Python
Чтобы помочь программистам преодолеть препятствия, существует множество полезных инструментов и пакетов Python, которые специально разработаны для анализа и улучшения кода. В этой статье автор рассматривает 7 таких.
Читать…
Разъяснивший Python
Список с условием (List Comprehension)
List comprehension — один из самых мощных инструментов Python, позволяющий создавать списки одной строкой кода.
Этот подход не только компактнее, но и быстрее традиционных циклов. Важно не злоупотреблять сложными условиями — код должен оставаться читаемым. Однажды я переписал цикл из 15 строк в одну строку list comprehension, и код стал работать на 30% быстрее.
Разъяснивший Python
List comprehension — один из самых мощных инструментов Python, позволяющий создавать списки одной строкой кода.
Этот подход не только компактнее, но и быстрее традиционных циклов. Важно не злоупотреблять сложными условиями — код должен оставаться читаемым. Однажды я переписал цикл из 15 строк в одну строку list comprehension, и код стал работать на 30% быстрее.
Разъяснивший Python
Многоточие в Python
Многоточие Python – это последовательность из трех точек, часто используемая в естественных языках. Но чего вы, возможно, не знаете – это еще и валидный объект в Python
Применяется он преимущественно в операциях нарезки матриц в NumPy. Однако можно использовать его вместо обычного pass в качестве плэйсхолдера в функции, которую еще не реализовали.
Разъяснивший Python
Многоточие Python – это последовательность из трех точек, часто используемая в естественных языках. Но чего вы, возможно, не знаете – это еще и валидный объект в Python
>>> ...
# Вывод покажет: Ellipsis
Применяется он преимущественно в операциях нарезки матриц в NumPy. Однако можно использовать его вместо обычного pass в качестве плэйсхолдера в функции, которую еще не реализовали.
Разъяснивший Python
Спортивное программирование: что это, зачем и какие задачи приходится решать
Это не программирование ради программирования, как можно было бы подумать, — соревнования помогают участникам повысить профессиональный уровень, научившись решать сложные задачи из самых разных направлений разработки. Так что такое спортивное программирование и что о нём стоит знать новичку?
Читать…
Разъяснивший Python
Это не программирование ради программирования, как можно было бы подумать, — соревнования помогают участникам повысить профессиональный уровень, научившись решать сложные задачи из самых разных направлений разработки. Так что такое спортивное программирование и что о нём стоит знать новичку?
Читать…
Разъяснивший Python
Data classes
Начиная с версии 3.7, Python поставляется с классами данных. У них есть несколько преимуществ по сравнению с обычными классами или другими альтернативами:
- возврат нескольких значений или словарей;
- класс данных требует минимального количества кода;
- возможность сравнения классов данных;
- возможность распечатать класс данных для отладки при помощи repr;
- снижение вероятности ошибок в связи с требованием класса данных type hints.
Разъяснивший Python
Начиная с версии 3.7, Python поставляется с классами данных. У них есть несколько преимуществ по сравнению с обычными классами или другими альтернативами:
- возврат нескольких значений или словарей;
- класс данных требует минимального количества кода;
- возможность сравнения классов данных;
- возможность распечатать класс данных для отладки при помощи repr;
- снижение вероятности ошибок в связи с требованием класса данных type hints.
Разъяснивший Python
List Comprehensions
List comprehension может заменить неэстетичные циклы, используемые для заполнения списка. Синтаксис выглядит следующим образом:
Поскольку здесь можно использовать выражения, вам доступна работа с математикой, вызов внешней функции и, наконец, вы сможете использовать «if» для фильтрации списка.
Разъяснивший Python
List comprehension может заменить неэстетичные циклы, используемые для заполнения списка. Синтаксис выглядит следующим образом:
[ expression for item in list if conditional ]
Поскольку здесь можно использовать выражения, вам доступна работа с математикой, вызов внешней функции и, наконец, вы сможете использовать «if» для фильтрации списка.
Разъяснивший Python
Замена переменных на месте
Этот аккуратный трюк поможет сэкономить несколько строк кода.
Разъяснивший Python
Этот аккуратный трюк поможет сэкономить несколько строк кода.
Разъяснивший Python
Настраиваемый логгер-декоратор
Начнем с примера использования. Так мы не перегружаем внимание внутренней сложностью и повышаем шансы создать удачный интерфейс модуля. На этом принципе основана разработка через тестирование — test-driven development (TTD).
У класса
Разъяснивший Python
Начнем с примера использования. Так мы не перегружаем внимание внутренней сложностью и повышаем шансы создать удачный интерфейс модуля. На этом принципе основана разработка через тестирование — test-driven development (TTD).
У класса
Logger есть метод log_msg(), который можно использовать напрямую внутри функций.Разъяснивший Python
Использование подчеркивания в REPL
Вы можете получить результат последнего выражения в Python REPL с помощью оператора подчеркивания, например, в Python REPL это выглядит следующим образом
Разъяснивший Python
Вы можете получить результат последнего выражения в Python REPL с помощью оператора подчеркивания, например, в Python REPL это выглядит следующим образом
Разъяснивший Python
Сложение списков
Не всегда операторы в python ведут себя так, как мы привыкли. Например сложение списков.
Как видно, инструкция 28 в случае
Разъяснивший Python
Не всегда операторы в python ведут себя так, как мы привыкли. Например сложение списков.
Как видно, инструкция 28 в случае
+ простое сложение, а в случае += — сложение на месте, которое не приводит к созданию нового списка. += в данном случае сопоставим по производительности с list.extend.Разъяснивший Python
Декорируем функции
Декоратор – это обертка вокруг функции, которая определенным образом изменяет ее поведение. Существуют варианты использования декораторов, и вы, возможно, уже применяли их раньше при работе с такими фреймворками, как Flask.
Разъяснивший Python
Декоратор – это обертка вокруг функции, которая определенным образом изменяет ее поведение. Существуют варианты использования декораторов, и вы, возможно, уже применяли их раньше при работе с такими фреймворками, как Flask.
Разъяснивший Python