Just Python
9.83K subscribers
4.72K photos
17 videos
4.71K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Проверка типов данных

При отладке или работе с незнакомым API бывает полезно узнать тип и структуру объекта.

Этот простой инструмент неоднократно выручал меня при работе с API, возвращающими сложно структурированные данные.

#theory // Just Python
Безопасное получение вложенных значений

Доступ к вложенным атрибутам объектов или вложенным ключам словарей часто приводит к ошибкам.

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

#theory // Just Python
Анализ производительности популярных подходов с бенчмарками часть 1

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

Результаты могут удивить: join обычно в 10-15 раз быстрее, чем последовательное использование оператора +. Причина проста - строки в Python неизменяемы, и каждая операция + создает новый объект.

list comprehension стабильно показывает результаты на 15-20% лучше, чем filter() с lambda-функцией. Однако этот разрыв может меняться в зависимости от сложности фильтрующей функции. Особенно впечатляет разница при доступе к элементам словаря

#theory // Just Python
Анализ производительности популярных подходов с бенчмарками часть 2

Метод dict.get() обычно работает примерно на 30-40% быстрее, чем явная проверка через if key in dict, и примерно в 2-3 раза быстрее, чем использование блока try-except.

Но не всегда стандартные методы лучше. Например, при сортировке списков с пользовательским ключом, использование operator.itemgetter() может быть на 10-15% быстрее lambda-функций.

#theory // Just Python
Функция проверки чисел на простоту

Оптимизированный алгоритм для проверки простоты числа.

В этом алгоритме я использую свойство, что все простые числа (кроме 2 и 3) можно представить в виде 6k ± 1. Это сокращает количество проверок примерно в 3 раза по сравнению с наивным перебором до квадратного корня.

#theory // Just Python
Алгоритм Евклида на Python

Алгоритм Евклида - элегантное решение для нахождения НОД

Расширенный алгоритм Евклида особенно полезен в криптографии и при решении линейных диофантовых уравнений. Я использовал его при реализации алгоритма RSA для учебного проекта.

#theory // Just Python
16 сентября в Arena Breakout: Infinite выходит седьмой сезон — «Утопия»

Если не сталкивались с игрой: это бесплатный тактический шутер про вылазки за добычей. Заходишь на локацию со своим снаряжением, набираешь лут и пытаешься уйти живым. Погиб — потерял всё, что было с собой.

Что завозят в новом сезоне:

• Заражённая зона — три карты превращаются в биоопасные локации с ночью, туманом и ливнем, по ним бродят шесть видов мутантов. Другие игроки при этом никуда не делись
• Режим на выживание — отдельный PvE без риска: снаряжение с собой не берёшь и ничего не теряешь, просто отбиваешься от волн и открываешь усиления
• Торговец прямо в рейде — можно обменять припасы и разведданные или докупить снаряжение
• Два новых ствола, сезонные обвесы и переработанная стрельба: дальность выше, попадания в голову ощутимее
• На старте бесплатно выдают прокачиваемую сапёрную лопату, скины и билеты, а между игроками разыгрывают 200 000 очков

Игра бесплатная, качается в Steam, российский регион поддерживается → https://abi.go.link/2wzTb
Бинарный поиск в Python

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

Формула left + (right - left) // 2 вместо обычной (left + right) // 2 защищает от переполнения при работе с большими массивами. Такая мелочь однажды спасла меня от трудноуловимого бага в промышленном коде.

#theory // Just Python
Функция для измерения времени выполнения кода

Отладка производительности - частая головная боль. Простой декоратор для измерения времени выполнения функций спасает в таких ситуациях.

Можно модифицировать этот декоратор, добавляя вывод аргументов функции или интеграцию с системой логирования проекта.

#theory // Just Python
POST запросы и отправка данных

Обратите внимание на параметр json= вместо data=. Он автоматически сериализует Python-словарь в JSON и устанавливает правильный заголовок Content-Type.

#theory // Just Python
Простой способ перевернуть строку

Этот трюк со срезами [::-1] я использую почти каждый день. Он работает значительно быстрее, чем итерационные методы типа ''.join(reversed(s)), что доказано бенчмарками. Кстати, тот же метод применим и к спискам.

#theory // Just Python
Список с условием (List Comprehension)

List comprehension — один из самых мощных инструментов Python, позволяющий создавать списки одной строкой кода.

Этот подход не только компактнее, но и быстрее традиционных циклов. Важно не злоупотреблять сложными условиями — код должен оставаться читаемым. Однажды я переписал цикл из 15 строк в одну строку list comprehension, и код стал работать на 30% быстрее.

#theory // Just Python
Сглаживание вложенного списка

Вложенные списки — частое явление, но иногда нужно "сгладить" их до одного уровня.

Для многоуровневых списков удобнее использовать рекурсивный подход.

#theory // Just Python
Многоточие в Python

Многоточие Python – это последовательность из трех точек, часто используемая в естественных языках. Но чего вы, возможно, не знаете – это еще и валидный объект в Python

>>> ...
# Вывод покажет: Ellipsis


Применяется он преимущественно в операциях нарезки матриц в NumPy. Однако можно использовать его вместо обычного pass в качестве плэйсхолдера в функции, которую еще не реализовали.

#theory // Just Python
Data classes

Начиная с версии 3.7, Python поставляется с классами данных. У них есть несколько преимуществ по сравнению с обычными классами или другими альтернативами:

- возврат нескольких значений или словарей;
- класс данных требует минимального количества кода;
- возможность сравнения классов данных;
- возможность распечатать класс данных для отладки при помощи repr;
- снижение вероятности ошибок в связи с требованием класса данных type hints.

#theory // Just Python
List Comprehensions

List comprehension может заменить неэстетичные циклы, используемые для заполнения списка. Синтаксис выглядит следующим образом:
[ expression for item in list if conditional ]


Поскольку здесь можно использовать выражения, вам доступна работа с математикой, вызов внешней функции и, наконец, вы сможете использовать «if» для фильтрации списка.

#theory // Just Python
Замена переменных на месте

Этот аккуратный трюк поможет сэкономить несколько строк кода.

#theory // Just Python
Обязательные аргументы

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

#theory // Just Python
Использование подчеркивания в REPL

Вы можете получить результат последнего выражения в Python REPL с помощью оператора подчеркивания, например, в Python REPL это выглядит следующим образом

#theory // Just Python