Python tricks | Хитрости Питона
6.67K subscribers
1.96K photos
26 videos
1 file
2.27K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

Сотрудничество: @SIeep_Token

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Обычные арифметические операторы (ч.5)

Класс Rational реализует метод truediv(self, other), который определяет поведение оператора деления /.
В методе truediv, если операнд other также является объектом класса Rational, то выполняется деление дробей, умножая на обратную дробь.
Если операнд other является целым числом или числом с плавающей запятой, то знаменатель дроби умножается на это число.
Если операнд other не является ни Rational, ни числом, вызывается исключение TypeError.
Метод str позволяет выводить дробь в виде строки.
Этот лайфхак полезен при работе с дробями или другими типами данных, где определение операции деления имеет смысл. Переопределение метода truediv позволяет объекту поддерживать стандартную математическую операцию деления в Python.

🔗 Python tricks
multitasking

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

Multitasking полезен, когда в приложении нужно:

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

Как видно из примера, задачи выполнились параллельно, в произвольном порядке.

🔗 Python tricks
Метод join

Метод join() позволяет объединить элементы последовательности (списка, кортежа и т.д.) в строку.

Основные моменты:

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

🔗 Python tricks
encode() и decode()

Функции encode() и decode() используются для преобразования строки в байтовое представление и обратно.

encode() преобразует строку в байты для хранения или передачи. А decode() конвертирует байты обратно в строку.
Параметр кодировки (в данном случае - utf-8) должен совпадать при encode и decode.

🔗 Python tricks
Обычные арифметические операторы (ч.6)

Этот лайфхак полезен при работе с комплексными числами или другими типами данных, где определение операции целочисленного деления имеет смысл. Переопределение метода floordiv позволяет объекту поддерживать стандартную математическую операцию целочисленного деления в Python.

🔗 Python tricks
Обычные арифметические операторы (ч.7)

Этот лайфхак полезен при работе с комплексными числами или другими типами данных, где определение операции остатка от деления имеет смысл. Переопределение метода mod позволяет объекту поддерживать стандартную математическую операцию остатка от деления в Python.

🔗 Python tricks
Рекурсия в Python

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

Рекурсивная функция должна иметь условие выхода из рекурсии (базовый случай), иначе возникнет бесконечная рекурсия.

Нужно избегать слишком глубокой рекурсии, иначе программа завершится с ошибкой StackOverflow.

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

На изображении представлена рекурсивная функция для вычисления факториала числа.

🔗 Python tricks
JPype

JPype - это модуль, который позволяет взаимодействовать с кодом на Java из Python.

Основные области применения JPype:
- Доступ к библиотекам Java из Python.
- Интеграция с существующим Java кодом.
- Использование JVM из Python.

В этом примере мы импортируем класс String из Java и создаем экземпляр этого класса.
Затем вызываем метод toUpperCase() у объекта javaString. Таким образом из Python мы можем работать с объектами и вызывать методы Java.
Результат работы программы:
HELLO FROM JAVA!

🔗 Python tricks
dict.get()

Метод dict.get() принимает два аргумента - ключ и значение по умолчанию, и позволяет получить значение по ключу из словаря.

Если ключ присутствует в словаре, возвращается соответствующее значение.
Если ключа нет, возвращается значение по умолчанию, вместо ошибки KeyError.

🔗 Python tricks
NumPy: nditer

numpy.nditer — это функция, которая позволяет эффективно выполнить итерацию по элементам массива NumPy. Она предоставляет удобный способ обхода элементов массива, особенно если тебе нужно работать с несколькими массивами одновременно или выполнить операции на низком уровне.

🔗 Python tricks
Обычные арифметические операторы (ч.8)

Этот лайфхак полезен при работе с дробями или другими типами данных, где определение операций целочисленного деления и остатка имеет смысл. Переопределение метода divmod позволяет объекту поддерживать стандартную функцию divmod() в Python, возвращая частное и остаток от деления в виде кортежа.

🔗 Python tricks
Frozenset

frozensets используются для создания неизменяемых множеств.

Основные особенности frozensets:

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

Здесь мы создали frozenset с элементами. Попытка добавить элемент вызывает ошибку, так как frozensets неизменяемы. Затем frozenset используется как ключ в словаре.

🔗 Python tricks
Генераторы коллекций

Генераторы коллекций позволяют эффективно создавать большие коллекции данных без необходимости хранить всю коллекцию в памяти.
Вместо этого генератор возвращает элементы коллекции по одному при каждом вызове next().

Генераторы коллекций создаются с помощью функций-генераторов, использующих ключевое слово yield.

В примере каждый вызов next() на генераторе squares_gen возвращает следующий квадрат и сохраняет текущее состояние генератора.

🔗 Python tricks
Pygal

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

Этот код создает объект диаграммы line_chart, добавляет в нее несколько рядов данных, задает заголовок, подписи по оси X и сохраняет результат в файл SVG.

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

🔗 Python tricks
Удаление префиксов и суффиксов

Методы .removeprefix() и .removesuffix() служат для удаления префикса или суффикса из строки соответственно. Эти методы были добавлены в Python 3.9.

Методы возвращают новую строку без указанного префикса или суффикса. Исходная строка не изменяется.

Если строка не начинается/заканчивается на указанный префикс/суффикс, возвращается копия исходной строки.

Методы вызывают исключение ValueError, если префикс/суффикс пустой.

🔗 Python tricks
Ruff

Ruff - это линтер для проверки качества кода.
Он помогает обнаруживать ошибки, следовать стилистическим рекомендациям и в целом писать более чистый и читаемый код.

Ruff можно использовать для проверки как отдельных файлов, так и целых проектов.

🔗 Python tricks
Memray

Memray - это библиотека для профилирования памяти и она является важным инструментом оптимизации производительности Python программ.

Библиотека отслеживает выделение и освобождение памяти при работе программы, поддерживает отслеживание ссылок на объект, применятся для профилирования на серверах и в виртуальных окружениях.

В примере мы используем декоратор memray.profile, который будет отслеживать все выделение и освобождение памяти внутри функции my_func().

При запуске этого кода memray выведет отчёт.

🔗 Python tricks
Аннотация типов

Аннотации типов (type hints) позволяют указать ожидаемые типы аргументов функций и возвращаемых значений. Они были введены в Python 3.5.

Аннотации типов не проверяются во время выполнения кода. Это просто подсказки для разработчиков и инструментов статического анализа кода.

Поддерживаются встроенные типы (int, float, str, bool и т.д.), а также классы, списки, словари и кортежи с указанием типов внутри.

Для необязательных аргументов используется Optional[] (например, Optional[int]).
Для возвращения нескольких типов можно использовать Union (например, Union[int, str]).

🔗 Python tricks
object

object - это встроенный класс, от него наследуются сразу все новые классы, если явно не указан другой базовый класс.

У объектов класса object есть методы init, str, repr и другие. Их можно переопределять в дочерних классах.

Атрибуты класса объявляются внутри класса, но вне всех методов. Атрибуты экземпляра объявляются в init.

Чтобы использовать класс object в своем коде, достаточно создать класс, унаследованный от object.

🔗 Python tricks
fileno()

Метод fileno() возвращает файловый дескриптор для данного файла. Файловый дескриптор — это целочисленное значение, которое однозначно определяет открытый файл в операционной системе. Он используется для операций ввода/вывода с файлом.

🔗 Python tricks