Счетчик ссылок
Каждый созданный объект имеет специальное поле — счетчик ссылок. Он хранит в себе количество ссылающихся на него объектов. Увеличивает свое значение, например, когда используется операция присваивания, или когда объект становится частью списка. При удалении переменной или же при использовании del счетчик ссылок уменьшается на 1. Например, при завершении работы функции, где эта переменная была объявлена.
🔗 Python tricks
Каждый созданный объект имеет специальное поле — счетчик ссылок. Он хранит в себе количество ссылающихся на него объектов. Увеличивает свое значение, например, когда используется операция присваивания, или когда объект становится частью списка. При удалении переменной или же при использовании del счетчик ссылок уменьшается на 1. Например, при завершении работы функции, где эта переменная была объявлена.
🔗 Python tricks
Обычные арифметические операторы (ч.2)
Метод sub(self, other) позволяет определить поведение объекта при использовании оператора вычитания -. В данном примере, если операнд other также является объектом типа Vector, мы вычитаем соответствующие координаты векторов и возвращаем новый объект Vector, представляющий разность. Если other не является вектором, мы вызываем исключение TypeError, указывая, что операция не поддерживается.
Этот лайфхак полезен при работе с пользовательскими типами данных, такими как векторы, матрицы и другие структуры данных, где определение операции вычитания имеет смысл. Переопределение метода sub позволяет объекту поддерживать стандартную математическую операцию вычитания в Python.
🔗 Python tricks
Метод sub(self, other) позволяет определить поведение объекта при использовании оператора вычитания -. В данном примере, если операнд other также является объектом типа Vector, мы вычитаем соответствующие координаты векторов и возвращаем новый объект Vector, представляющий разность. Если other не является вектором, мы вызываем исключение TypeError, указывая, что операция не поддерживается.
Этот лайфхак полезен при работе с пользовательскими типами данных, такими как векторы, матрицы и другие структуры данных, где определение операции вычитания имеет смысл. Переопределение метода sub позволяет объекту поддерживать стандартную математическую операцию вычитания в Python.
🔗 Python tricks
Обычные арифметические операторы (ч.3)
Метод mul(self, other) позволяет определить поведение объекта при использовании оператора умножения *. В данном примере, если операнд other является числом (целым или вещественным), мы умножаем соответствующие координаты вектора на это число и возвращаем новый объект Vector, представляющий результат умножения. Если other не является числом, мы вызываем исключение TypeError, указывая, что операция не поддерживается.
Метод rmul(self, other) позволяет поддерживать коммутативность умножения, т.е. возможность умножения числа на вектор (например, 3 * v). Этот метод просто вызывает mul, чтобы обеспечить одинаковое поведение для обеих форм умножения.
Этот лайфхак полезен при работе с пользовательскими типами данных, такими как векторы, где определение операции умножения имеет смысл. Переопределение методов mul и rmul позволяет объекту поддерживать стандартную математическую операцию умножения в Python.
🔗 Python tricks
Метод mul(self, other) позволяет определить поведение объекта при использовании оператора умножения *. В данном примере, если операнд other является числом (целым или вещественным), мы умножаем соответствующие координаты вектора на это число и возвращаем новый объект Vector, представляющий результат умножения. Если other не является числом, мы вызываем исключение TypeError, указывая, что операция не поддерживается.
Метод rmul(self, other) позволяет поддерживать коммутативность умножения, т.е. возможность умножения числа на вектор (например, 3 * v). Этот метод просто вызывает mul, чтобы обеспечить одинаковое поведение для обеих форм умножения.
Этот лайфхак полезен при работе с пользовательскими типами данных, такими как векторы, где определение операции умножения имеет смысл. Переопределение методов mul и rmul позволяет объекту поддерживать стандартную математическую операцию умножения в Python.
🔗 Python tricks
Обычные арифметические операторы (ч.4)
Класс Matrix реализует метод matmul(self, other), который определяет поведение оператора матричного умножения @.
В методе matmul, проверяется, что число столбцов первой матрицы равно числу строк второй матрицы, так как это условие необходимо для умножения матриц.
Затем создается результатирующая матрица и заполняется нулями.
Умножение матриц выполняется с помощью вложенных циклов.
Результат умножения возвращается в виде новой матрицы.
Этот лайфхак полезен для работы с линейной алгеброй и матричными операциями, где оператор @ позволяет интуитивно и легко выполнять умножение матриц, переопределяя метод matmul для пользовательских классов в Python.
🔗 Python tricks
Класс Matrix реализует метод matmul(self, other), который определяет поведение оператора матричного умножения @.
В методе matmul, проверяется, что число столбцов первой матрицы равно числу строк второй матрицы, так как это условие необходимо для умножения матриц.
Затем создается результатирующая матрица и заполняется нулями.
Умножение матриц выполняется с помощью вложенных циклов.
Результат умножения возвращается в виде новой матрицы.
Этот лайфхак полезен для работы с линейной алгеброй и матричными операциями, где оператор @ позволяет интуитивно и легко выполнять умножение матриц, переопределяя метод matmul для пользовательских классов в Python.
🔗 Python tricks
flush
В Python метод flush() используется для сброса буфера записи на диск. Когда ты пишешь данные в файл, они сначала попадают в буфер (временное хранилище) для повышения производительности. Метод flush() заставляет Python записать все данные из буфера в файл немедленно.
🔗 Python tricks
В Python метод flush() используется для сброса буфера записи на диск. Когда ты пишешь данные в файл, они сначала попадают в буфер (временное хранилище) для повышения производительности. Метод flush() заставляет Python записать все данные из буфера в файл немедленно.
🔗 Python tricks
Обычные арифметические операторы (ч.5)
Класс Rational реализует метод truediv(self, other), который определяет поведение оператора деления /.
В методе truediv, если операнд other также является объектом класса Rational, то выполняется деление дробей, умножая на обратную дробь.
Если операнд other является целым числом или числом с плавающей запятой, то знаменатель дроби умножается на это число.
Если операнд other не является ни Rational, ни числом, вызывается исключение TypeError.
Метод str позволяет выводить дробь в виде строки.
Этот лайфхак полезен при работе с дробями или другими типами данных, где определение операции деления имеет смысл. Переопределение метода truediv позволяет объекту поддерживать стандартную математическую операцию деления в Python.
🔗 Python tricks
Класс Rational реализует метод truediv(self, other), который определяет поведение оператора деления /.
В методе truediv, если операнд other также является объектом класса Rational, то выполняется деление дробей, умножая на обратную дробь.
Если операнд other является целым числом или числом с плавающей запятой, то знаменатель дроби умножается на это число.
Если операнд other не является ни Rational, ни числом, вызывается исключение TypeError.
Метод str позволяет выводить дробь в виде строки.
Этот лайфхак полезен при работе с дробями или другими типами данных, где определение операции деления имеет смысл. Переопределение метода truediv позволяет объекту поддерживать стандартную математическую операцию деления в Python.
🔗 Python tricks
multitasking
Библиотека multitasking предназначена для организации параллельных вычислений с использованием кооперативных потоков.
Она позволяет легко создавать параллельные задачи и управлять ими.
Multitasking полезен, когда в приложении нужно:
- Выполнять несколько задач параллельно
- Организовать очереди задач и пулы потоков
- Избежать блокировки интерфейса при длительных операциях
Как видно из примера, задачи выполнились параллельно, в произвольном порядке.
🔗 Python tricks
Библиотека multitasking предназначена для организации параллельных вычислений с использованием кооперативных потоков.
Она позволяет легко создавать параллельные задачи и управлять ими.
Multitasking полезен, когда в приложении нужно:
- Выполнять несколько задач параллельно
- Организовать очереди задач и пулы потоков
- Избежать блокировки интерфейса при длительных операциях
Как видно из примера, задачи выполнились параллельно, в произвольном порядке.
🔗 Python tricks
Метод join
Метод join() позволяет объединить элементы последовательности (списка, кортежа и т.д.) в строку.
Основные моменты:
- Метод принадлежит строке, вызывается на разделителе.
- В качестве разделителя можно использовать любую строку.
- В результате получится строка, где между элементами последовательности вставлен разделитель.
🔗 Python tricks
Метод join() позволяет объединить элементы последовательности (списка, кортежа и т.д.) в строку.
Основные моменты:
- Метод принадлежит строке, вызывается на разделителе.
- В качестве разделителя можно использовать любую строку.
- В результате получится строка, где между элементами последовательности вставлен разделитель.
🔗 Python tricks
encode() и decode()
Функции encode() и decode() используются для преобразования строки в байтовое представление и обратно.
encode() преобразует строку в байты для хранения или передачи. А decode() конвертирует байты обратно в строку.
Параметр кодировки (в данном случае - utf-8) должен совпадать при encode и decode.
🔗 Python tricks
Функции encode() и decode() используются для преобразования строки в байтовое представление и обратно.
encode() преобразует строку в байты для хранения или передачи. А decode() конвертирует байты обратно в строку.
Параметр кодировки (в данном случае - utf-8) должен совпадать при encode и decode.
🔗 Python tricks
Обычные арифметические операторы (ч.6)
Этот лайфхак полезен при работе с комплексными числами или другими типами данных, где определение операции целочисленного деления имеет смысл. Переопределение метода floordiv позволяет объекту поддерживать стандартную математическую операцию целочисленного деления в Python.
🔗 Python tricks
Этот лайфхак полезен при работе с комплексными числами или другими типами данных, где определение операции целочисленного деления имеет смысл. Переопределение метода floordiv позволяет объекту поддерживать стандартную математическую операцию целочисленного деления в Python.
🔗 Python tricks
Обычные арифметические операторы (ч.7)
Этот лайфхак полезен при работе с комплексными числами или другими типами данных, где определение операции остатка от деления имеет смысл. Переопределение метода mod позволяет объекту поддерживать стандартную математическую операцию остатка от деления в Python.
🔗 Python tricks
Этот лайфхак полезен при работе с комплексными числами или другими типами данных, где определение операции остатка от деления имеет смысл. Переопределение метода mod позволяет объекту поддерживать стандартную математическую операцию остатка от деления в Python.
🔗 Python tricks
Рекурсия в Python
Рекурсия - это метод программирования, когда функция вызывает сама себя.
Это позволяет разбивать сложные задачи на более простые подзадачи.
Рекурсивная функция должна иметь условие выхода из рекурсии (базовый случай), иначе возникнет бесконечная рекурсия.
Нужно избегать слишком глубокой рекурсии, иначе программа завершится с ошибкой StackOverflow.
Рекурсию можно заменить циклом, но рекурсивные алгоритмы часто более элегантны и просты для понимания.
На изображении представлена рекурсивная функция для вычисления факториала числа.
🔗 Python tricks
Рекурсия - это метод программирования, когда функция вызывает сама себя.
Это позволяет разбивать сложные задачи на более простые подзадачи.
Рекурсивная функция должна иметь условие выхода из рекурсии (базовый случай), иначе возникнет бесконечная рекурсия.
Нужно избегать слишком глубокой рекурсии, иначе программа завершится с ошибкой StackOverflow.
Рекурсию можно заменить циклом, но рекурсивные алгоритмы часто более элегантны и просты для понимания.
На изображении представлена рекурсивная функция для вычисления факториала числа.
🔗 Python tricks
JPype
JPype - это модуль, который позволяет взаимодействовать с кодом на Java из Python.
Основные области применения JPype:
- Доступ к библиотекам Java из Python.
- Интеграция с существующим Java кодом.
- Использование JVM из Python.
В этом примере мы импортируем класс String из Java и создаем экземпляр этого класса.
Затем вызываем метод toUpperCase() у объекта javaString. Таким образом из Python мы можем работать с объектами и вызывать методы Java.
Результат работы программы:
HELLO FROM JAVA!
🔗 Python tricks
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
Метод dict.get() принимает два аргумента - ключ и значение по умолчанию, и позволяет получить значение по ключу из словаря.
Если ключ присутствует в словаре, возвращается соответствующее значение.
Если ключа нет, возвращается значение по умолчанию, вместо ошибки KeyError.
🔗 Python tricks
NumPy: nditer
numpy.nditer — это функция, которая позволяет эффективно выполнить итерацию по элементам массива NumPy. Она предоставляет удобный способ обхода элементов массива, особенно если тебе нужно работать с несколькими массивами одновременно или выполнить операции на низком уровне.
🔗 Python tricks
numpy.nditer — это функция, которая позволяет эффективно выполнить итерацию по элементам массива NumPy. Она предоставляет удобный способ обхода элементов массива, особенно если тебе нужно работать с несколькими массивами одновременно или выполнить операции на низком уровне.
🔗 Python tricks
Обычные арифметические операторы (ч.8)
Этот лайфхак полезен при работе с дробями или другими типами данных, где определение операций целочисленного деления и остатка имеет смысл. Переопределение метода divmod позволяет объекту поддерживать стандартную функцию divmod() в Python, возвращая частное и остаток от деления в виде кортежа.
🔗 Python tricks
Этот лайфхак полезен при работе с дробями или другими типами данных, где определение операций целочисленного деления и остатка имеет смысл. Переопределение метода divmod позволяет объекту поддерживать стандартную функцию divmod() в Python, возвращая частное и остаток от деления в виде кортежа.
🔗 Python tricks
Frozenset
frozensets используются для создания неизменяемых множеств.
Основные особенности frozensets:
- Они неизменяемы, то есть элементы нельзя добавить или удалить после создания.
- Они могут использоваться как ключи в словарях, так как неизменяемы.
- Они быстрее обычных множеств в операциях, так как являются неизменяемыми.
Здесь мы создали frozenset с элементами. Попытка добавить элемент вызывает ошибку, так как frozensets неизменяемы. Затем frozenset используется как ключ в словаре.
🔗 Python tricks
frozensets используются для создания неизменяемых множеств.
Основные особенности frozensets:
- Они неизменяемы, то есть элементы нельзя добавить или удалить после создания.
- Они могут использоваться как ключи в словарях, так как неизменяемы.
- Они быстрее обычных множеств в операциях, так как являются неизменяемыми.
Здесь мы создали frozenset с элементами. Попытка добавить элемент вызывает ошибку, так как frozensets неизменяемы. Затем frozenset используется как ключ в словаре.
🔗 Python tricks
Генераторы коллекций
Генераторы коллекций позволяют эффективно создавать большие коллекции данных без необходимости хранить всю коллекцию в памяти.
Вместо этого генератор возвращает элементы коллекции по одному при каждом вызове next().
Генераторы коллекций создаются с помощью функций-генераторов, использующих ключевое слово yield.
В примере каждый вызов next() на генераторе squares_gen возвращает следующий квадрат и сохраняет текущее состояние генератора.
🔗 Python tricks
Генераторы коллекций позволяют эффективно создавать большие коллекции данных без необходимости хранить всю коллекцию в памяти.
Вместо этого генератор возвращает элементы коллекции по одному при каждом вызове next().
Генераторы коллекций создаются с помощью функций-генераторов, использующих ключевое слово yield.
В примере каждый вызов next() на генераторе squares_gen возвращает следующий квадрат и сохраняет текущее состояние генератора.
🔗 Python tricks
Pygal
Pygal - это библиотека для визуализации данных с помощью SVG.
Она позволяет строить разнообразные интерактивные графики, такие как линейные, столбчатые, круговые диаграммы.
Этот код создает объект диаграммы line_chart, добавляет в нее несколько рядов данных, задает заголовок, подписи по оси X и сохраняет результат в файл SVG.
В итоге получается интерактивный график изменения доли браузеров за определенный период.
🔗 Python tricks
Pygal - это библиотека для визуализации данных с помощью SVG.
Она позволяет строить разнообразные интерактивные графики, такие как линейные, столбчатые, круговые диаграммы.
Этот код создает объект диаграммы line_chart, добавляет в нее несколько рядов данных, задает заголовок, подписи по оси X и сохраняет результат в файл SVG.
В итоге получается интерактивный график изменения доли браузеров за определенный период.
🔗 Python tricks
Удаление префиксов и суффиксов
Методы .removeprefix() и .removesuffix() служат для удаления префикса или суффикса из строки соответственно. Эти методы были добавлены в Python 3.9.
Методы возвращают новую строку без указанного префикса или суффикса. Исходная строка не изменяется.
Если строка не начинается/заканчивается на указанный префикс/суффикс, возвращается копия исходной строки.
Методы вызывают исключение ValueError, если префикс/суффикс пустой.
🔗 Python tricks
Методы .removeprefix() и .removesuffix() служат для удаления префикса или суффикса из строки соответственно. Эти методы были добавлены в Python 3.9.
Методы возвращают новую строку без указанного префикса или суффикса. Исходная строка не изменяется.
Если строка не начинается/заканчивается на указанный префикс/суффикс, возвращается копия исходной строки.
Методы вызывают исключение ValueError, если префикс/суффикс пустой.
🔗 Python tricks
Ruff
Ruff - это линтер для проверки качества кода.
Он помогает обнаруживать ошибки, следовать стилистическим рекомендациям и в целом писать более чистый и читаемый код.
Ruff можно использовать для проверки как отдельных файлов, так и целых проектов.
🔗 Python tricks
Ruff - это линтер для проверки качества кода.
Он помогает обнаруживать ошибки, следовать стилистическим рекомендациям и в целом писать более чистый и читаемый код.
Ruff можно использовать для проверки как отдельных файлов, так и целых проектов.
🔗 Python tricks