Команда дня: сравнение объектов с помощью __eq__
В Python, когда вы используете оператор
❌ Поведение по умолчанию:
Без переопределения ‘__eq__’, Python сравнивает объекты на основе их ссылок в памяти. То есть, два объекта будут считаться равными только в том случае, если они являются одним и тем же объектом.
Пример:
Здесь, несмотря на то, что у объектов
✅ С методом ‘__eq__’ (пользовательское сравнение):
Чтобы изменить поведение сравнения объектов, вы можете переопределить метод ‘__eq__’ в вашем классе. Этот метод будет определять, что именно считать равенством для объектов вашего класса.
Пример:
В этом примере мы определяем, что объекты считаются равными, если их атрибуты
Библиотека питониста #буст
В Python, когда вы используете оператор
==
для сравнения объектов, по умолчанию проверяется, ссылаются ли объекты на один и тот же экземпляр в памяти. Однако, если вы хотите настроить, как должны сравниваться объекты вашего класса, вам нужно переопределить метод ‘__eq__’.❌ Поведение по умолчанию:
Без переопределения ‘__eq__’, Python сравнивает объекты на основе их ссылок в памяти. То есть, два объекта будут считаться равными только в том случае, если они являются одним и тем же объектом.
Пример:
class MyClass:
def __init__(self, value):
self.value = value
a, b = MyClass(1), MyClass(1)
print(a == b) # False
Здесь, несмотря на то, что у объектов
a
и b
одинаковые значения атрибутов, они считаются неравными, так как это разные экземпляры класса.✅ С методом ‘__eq__’ (пользовательское сравнение):
Чтобы изменить поведение сравнения объектов, вы можете переопределить метод ‘__eq__’ в вашем классе. Этот метод будет определять, что именно считать равенством для объектов вашего класса.
Пример:
class MyClass:
def __init__(self, value):
self.value = value
def __eq__(self, other):
if isinstance(other, MyClass):
return self.value == other.value
return False
a, b = MyClass(1), MyClass(1)
print(a == b) # True
В этом примере мы определяем, что объекты считаются равными, если их атрибуты
value
одинаковы. Теперь вывод будет True
, так как у a
и b
одинаковые значения.Библиотека питониста #буст
👍16🔥2❤1
Чек-лист: 5 приемов ускорения Python
👍 JIT-компиляция с Numba:
Numba — это JIT-компилятор, который переводит код Python в быстрый машинный код. Добавив декоратор
Пример:
Результат: прирост производительности до 10-30 раз.
👍 Многозадачность:
Python ограничивает многозадачность из-за GIL, но для вычислительно сложных задач можно использовать многопроцессорность, чтобы обойти это ограничение.
Пример:
👍 Cython и PyPy:
Cython компилирует Python в C, что ускоряет выполнение кода. PyPy — это JIT-компилятор, который улучшает производительность без изменения кода.
Пример: С использованием Cython можно ускорить код, написав его в файле
👍 Правильные структуры данных:
Используйте более эффективные структуры данных, такие как массивы NumPy, вместо списков Python для числовых вычислений. Это ускоряет выполнение и экономит память.
Пример:
Векторизация операций с NumPy может быть в 50 раз быстрее.
👍 Инструменты профилирования:
Профилирование помогает понять, какие части кода нуждаются в оптимизации. Используйте cProfile и line_profiler для анализа производительности.
Пример:
Это поможет найти узкие места и ускорить работу.
Библиотека питониста #буст
👍 JIT-компиляция с Numba:
Numba — это JIT-компилятор, который переводит код Python в быстрый машинный код. Добавив декоратор
@jit
, вы можете ускорить вычисления в циклах и операциях с массивами.Пример:
from numba import jit
import numpy as np
import time
@jit(nopython=True)
def sum_squares(arr):
total = 0
for i in range(arr.shape[0]):
total += arr[i] * arr[i]
return total
data = np.arange(1000000)
start = time.time()
result = sum_squares(data)
end = time.time()
print("Numba JIT:", result, "Time:", end - start)
Результат: прирост производительности до 10-30 раз.
👍 Многозадачность:
Python ограничивает многозадачность из-за GIL, но для вычислительно сложных задач можно использовать многопроцессорность, чтобы обойти это ограничение.
Пример:
import multiprocessing as mp
def process_image(image):
return image ** 2
if __name__ == '__main__':
images = range(20)
with mp.Pool(mp.cpu_count()) as pool:
results = pool.map(process_image, images)
print(results)
👍 Cython и PyPy:
Cython компилирует Python в C, что ускоряет выполнение кода. PyPy — это JIT-компилятор, который улучшает производительность без изменения кода.
Пример: С использованием Cython можно ускорить код, написав его в файле
.pyx
, а с PyPy просто сменив интерпретатор.👍 Правильные структуры данных:
Используйте более эффективные структуры данных, такие как массивы NumPy, вместо списков Python для числовых вычислений. Это ускоряет выполнение и экономит память.
Пример:
import numpy as np
data = np.arange(1000000)
result = data * 2
Векторизация операций с NumPy может быть в 50 раз быстрее.
👍 Инструменты профилирования:
Профилирование помогает понять, какие части кода нуждаются в оптимизации. Используйте cProfile и line_profiler для анализа производительности.
Пример:
import cProfile
def heavy_computation():
return sum([i * i for i in range(1000000)])
cProfile.run('heavy_computation()')
Это поможет найти узкие места и ускорить работу.
Библиотека питониста #буст
👍21❤3🔥3
🔥 Делимся Python-репозиториями
Давайте обсудим самые интересные и полезные Python-репозитории!
✔️ Какие репозитории вы используете чаще всего?
✔️ Какие проекты вас впечатлили, но пока не получили широкой известности?
✔️ Какой Python-репозиторий можно поковырять для удовольствия?
Библиотека питониста #междусобойчик
Давайте обсудим самые интересные и полезные Python-репозитории!
✔️ Какие репозитории вы используете чаще всего?
✔️ Какие проекты вас впечатлили, но пока не получили широкой известности?
✔️ Какой Python-репозиторий можно поковырять для удовольствия?
Библиотека питониста #междусобойчик
❤5👍2🔥1
🎙️ Подкаст: когда не стоит начинать с юнит-тестов
Всегда ли тестирование начинается с юнит-тестов? Или иногда лучше сразу писать интеграционные или end-to-end тесты?
В новом выпуске The Real Python Podcast вы узнаете:
🔸 С чего лучше начинать тестирование кода
🔸 Как использовать pytest для интеграционных тестов
🔸 Что важно при создании тестового набора
🔸 Когда юнит-тесты действительно необходимы
🔗 Подкаст доступен по ссылке: https://clc.to/rcPHEw
Библиотека питониста #буст
Всегда ли тестирование начинается с юнит-тестов? Или иногда лучше сразу писать интеграционные или end-to-end тесты?
В новом выпуске The Real Python Podcast вы узнаете:
🔸 С чего лучше начинать тестирование кода
🔸 Как использовать pytest для интеграционных тестов
🔸 Что важно при создании тестового набора
🔸 Когда юнит-тесты действительно необходимы
🔗 Подкаст доступен по ссылке: https://clc.to/rcPHEw
Библиотека питониста #буст
👍7❤1
Forwarded from Proglib.academy | IT-курсы
Можно ли стать разработчиком, если в школе ненавидел математику? А если наоборот — тащился от алгебры и геометрии, но кодить не умеешь? Эта статья раскладывает всё по полочкам: где без математики никуда, а где можно и без неё.
✓ Почему все считают, что программисты — математики
✓ В каких сферах разработки можно вообще не знать математику
✓ Где хватит готовых библиотек, а где придётся разбираться в формулах
✓ Какие области программирования требуют мощного математического бэкграунда
✓ Что делать, если математика — это боль, но хочется освоить ML или Data Science
✓ Топ книг, которые помогут понять и даже полюбить математику
Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
Когда изучить, как оно работает, в шаге от тебя, но ты снова выбираешь путь страданий... 😭
Библиотека питониста #развлекалово
Библиотека питониста #развлекалово
😁15💯5❤3
📊 Тестовые задания — любовь или боль?
По данным исследования, 81% IT-специалистов в России просто игнорируют вакансии с тестовыми заданиями. Программисты оказались самыми «неприступными» — только 19% согласны их выполнять.
😆 Только тестировщики, которые сами по долгу службы гоняют тесты, готовы пройти их ради работы (63%). Профессиональная эмпатия?
Как вы относитесь к тестовым заданиям при трудоустройстве? Делитесь мнением в комментах! 👇
🔥 — готов(-а) выполнить, если вакансия интересная
👍 — только если тестовое оплачивается
🌚 — игнорю такие вакансии сразу
🤔 — я уже делал(-а) тестовое, а его использовали в проде бесплатно
Библиотека питониста #междусобойчик
По данным исследования, 81% IT-специалистов в России просто игнорируют вакансии с тестовыми заданиями. Программисты оказались самыми «неприступными» — только 19% согласны их выполнять.
😆 Только тестировщики, которые сами по долгу службы гоняют тесты, готовы пройти их ради работы (63%). Профессиональная эмпатия?
Как вы относитесь к тестовым заданиям при трудоустройстве? Делитесь мнением в комментах! 👇
🔥 — готов(-а) выполнить, если вакансия интересная
👍 — только если тестовое оплачивается
🌚 — игнорю такие вакансии сразу
🤔 — я уже делал(-а) тестовое, а его использовали в проде бесплатно
Библиотека питониста #междусобойчик
🔥43🌚18👍14🤔5
🐍 Твой Python-код жрёт память? 11 способов это исправить!
Высокая производительность и масштабируемость невозможны, если приложение неэффективно расходует RAM. Разберём лучшие техники оптимизации памяти в Python, которые помогут сократить потребление ресурсов и ускорить работу кода.
👉 Читать статью
Библиотека питониста
Высокая производительность и масштабируемость невозможны, если приложение неэффективно расходует RAM. Разберём лучшие техники оптимизации памяти в Python, которые помогут сократить потребление ресурсов и ускорить работу кода.
👉 Читать статью
Библиотека питониста
👍10😁1
🐍 Новости недели
🔹 PEP 736 отклонён — предложение о краткой записи именованных аргументов отвергнуто.
🔹 Polars Cloud — новый облачный сервис для удалённого выполнения запросов.
🔹 Опасные PyPI-пакеты — вредоносные библиотеки похитили облачные токены 14 100 пользователей.
🔹 Ошибка в бенчмарках CPython 3.14 — прирост производительности tail-call интерпретатора завышен из-за некорректных тестов.
🔹 Django на FOSDEM 2025 — секция «Inclusive Web» о доступности и инклюзивности в вебе.
🎥 Что посмотреть:
🔹 Создание Google Docs с Python
🔹 12 встроенных функций Python
🛠 Полезности:
🔹 Справочник инструментов разработчика Python
📚 Что почитать:
🔹 Анонимный чат в Telegram: бот с MiniApp интерфейсом
🔹 Как работают dict, slots и weakref
🔹 Аннотации типов
🔹 Python-разработчик изучает C++
🏗 Репозитории:
🔹 Pydoll — автоматизация браузеров
🔹 Nodezator — графический редактор узлов
🔹 phmutest — отладка неработающих примеров в Markdown
Библиотека питониста #свежак
🔹 PEP 736 отклонён — предложение о краткой записи именованных аргументов отвергнуто.
🔹 Polars Cloud — новый облачный сервис для удалённого выполнения запросов.
🔹 Опасные PyPI-пакеты — вредоносные библиотеки похитили облачные токены 14 100 пользователей.
🔹 Ошибка в бенчмарках CPython 3.14 — прирост производительности tail-call интерпретатора завышен из-за некорректных тестов.
🔹 Django на FOSDEM 2025 — секция «Inclusive Web» о доступности и инклюзивности в вебе.
🎥 Что посмотреть:
🔹 Создание Google Docs с Python
🔹 12 встроенных функций Python
🛠 Полезности:
🔹 Справочник инструментов разработчика Python
📚 Что почитать:
🔹 Анонимный чат в Telegram: бот с MiniApp интерфейсом
🔹 Как работают dict, slots и weakref
🔹 Аннотации типов
🔹 Python-разработчик изучает C++
🏗 Репозитории:
🔹 Pydoll — автоматизация браузеров
🔹 Nodezator — графический редактор узлов
🔹 phmutest — отладка неработающих примеров в Markdown
Библиотека питониста #свежак
👍7❤🔥2❤1
Это база: быстрая проверка списка на пустоту
При проверке списка на пустоту часто используют два варианта:
✅ Pythonic способ:
⏳ Медленный способ:
Хотя оба варианта работают, первый быстрее почти в 2 раза!
if not mylist быстрее, потому что:
✔️ Использует 2 инструкции виртуальной машины (LOAD_GLOBAL, TO_BOOL).
✔️ Инструкция
if len(mylist) == 0 медленнее, потому что:
📍 Требует 5 инструкций (LOAD_GLOBAL, LOAD_FAST, CALL, LOAD_CONST, COMPARE_OP).
📍 Вызывает
Вывод:
Используйте
👉 Подробности можно узнать в детальной статье: https://clc.to/rd3OQg
Библиотека питониста #буст
При проверке списка на пустоту часто используют два варианта:
✅ Pythonic способ:
if not mylist:
⏳ Медленный способ:
if len(mylist) == 0:
Хотя оба варианта работают, первый быстрее почти в 2 раза!
if not mylist быстрее, потому что:
✔️ Использует 2 инструкции виртуальной машины (LOAD_GLOBAL, TO_BOOL).
✔️ Инструкция
TO_BOOL_LIST
оптимизирована под списки и читает размер за 1 операцию.if len(mylist) == 0 медленнее, потому что:
📍 Требует 5 инструкций (LOAD_GLOBAL, LOAD_FAST, CALL, LOAD_CONST, COMPARE_OP).
📍 Вызывает
len()
, что добавляет функциональные вызовы и лишние обращения к памяти.Вывод:
Используйте
if not mylist
— это и короче, и быстрее. Особенно важно в критичных к скорости местах кода! 👉 Подробности можно узнать в детальной статье: https://clc.to/rd3OQg
Библиотека питониста #буст
❤21👍14😁4😢1🥱1
🚀 Вышел NumPy 2.2.4
Свежий патч-релиз NumPy 2.2.4 включает важные исправления ошибок и значительные улучшения в системе типов. Также обновлена поддержка платформ.
Основные фиксы:
✔️ Исправлены ошибки в numpy.loadtxt, np.nonzero, bincount, searchsorted
✔️ Улучшена безопасность многопоточного выполнения
✔️ Исправлена сборка на s390x с clang
✔️ Обновлена поддержка FreeBSD и тестов на QEMU
✔️ Существенные улучшения типизации
Ссылка на релиз: https://clc.to/4AxrTw
Вы обновляетесь на патч-релизы вроде 2.2.4 или ждёте крупных обновлений, таких как 2.3 или 2.4?
👍 Обновляемся на патчи
🤔 Ждём крупных релизов
Библиотека питониста #свежак
Свежий патч-релиз NumPy 2.2.4 включает важные исправления ошибок и значительные улучшения в системе типов. Также обновлена поддержка платформ.
Основные фиксы:
✔️ Исправлены ошибки в numpy.loadtxt, np.nonzero, bincount, searchsorted
✔️ Улучшена безопасность многопоточного выполнения
✔️ Исправлена сборка на s390x с clang
✔️ Обновлена поддержка FreeBSD и тестов на QEMU
✔️ Существенные улучшения типизации
Ссылка на релиз: https://clc.to/4AxrTw
Вы обновляетесь на патч-релизы вроде 2.2.4 или ждёте крупных обновлений, таких как 2.3 или 2.4?
👍 Обновляемся на патчи
🤔 Ждём крупных релизов
Библиотека питониста #свежак
👍15🤔7❤3
❗️Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
👍3
🧠 Шпаргалка по алгоритмам
Готовитесь к техническому интервью или хотите прокачать алгоритмическое мышление? Мы нашли отличный репозиторий-шпаргалку с ключевыми концепциями, которые помогут вам уверенно решать задачи.
Внутри:
🔹 Разбор основных структур данных
🔹 Популярные алгоритмы и их применение
🔹 Советы по оптимизации решений
🔹 Подходы к решению задач на кодинг-интервью
Ссылка на репозиторий: https://clc.to/_fEkZg
Библиотека питониста #буст
Готовитесь к техническому интервью или хотите прокачать алгоритмическое мышление? Мы нашли отличный репозиторий-шпаргалку с ключевыми концепциями, которые помогут вам уверенно решать задачи.
Внутри:
🔹 Разбор основных структур данных
🔹 Популярные алгоритмы и их применение
🔹 Советы по оптимизации решений
🔹 Подходы к решению задач на кодинг-интервью
Ссылка на репозиторий: https://clc.to/_fEkZg
Библиотека питониста #буст
👍9❤1
Media is too big
VIEW IN TELEGRAM
Proglib рассказывает базу в формате рилса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2
🖥️ Обзор: какую Python GUI-библиотеку выбрать в 2025 году?
Хотите добавить графический интерфейс в ваше приложение, но не знаете, с чего начать? Тогда эта статья для вас!
Что вас ждет в статье:
✔️ Сравнение самых популярных Python GUI-фреймворков и их ключевых преимуществ.
✔️ Лицензионные моменты, которые могут повлиять на ваш выбор.
✔️ Примеры кода с простыми приложениями «Hello, World!» для каждой библиотеки.
🎯 Зачем читать?
Вы найдете полезную информацию, которая поможет выбрать идеальную библиотеку для вашего проекта, будь то простое приложение или сложная система с графическим интерфейсом.
👉 Ссылка на статью: https://clc.to/j3l2Zw
Библиотека питониста #буст
Хотите добавить графический интерфейс в ваше приложение, но не знаете, с чего начать? Тогда эта статья для вас!
Что вас ждет в статье:
✔️ Сравнение самых популярных Python GUI-фреймворков и их ключевых преимуществ.
✔️ Лицензионные моменты, которые могут повлиять на ваш выбор.
✔️ Примеры кода с простыми приложениями «Hello, World!» для каждой библиотеки.
🎯 Зачем читать?
Вы найдете полезную информацию, которая поможет выбрать идеальную библиотеку для вашего проекта, будь то простое приложение или сложная система с графическим интерфейсом.
👉 Ссылка на статью: https://clc.to/j3l2Zw
Библиотека питониста #буст
👍9❤4🔥1
⚙️ How to: оптимизируем код с помощью профилировщика
Хотите узнать, что замедляет ваш код? Используйте встроенный профилировщик cProfile. Этот мощный инструмент поможет выявить проблемные участки и ускорить выполнение.
Пример использования:
Что показывает результат:
▪️ Общее время: 4 вызова функций за 0.000 CPU секунд.
▪️ Подробная статистика:
-
-
-
-
-
Пример вывода:
Как оптимизировать:
1. Анализируйте
2. Сократите вызовы: если ncalls высок, рассмотрите оптимизацию логики.
3. Тестируйте изменения: повторяйте профилирование после оптимизации.
Библиотека питониста #буст
Хотите узнать, что замедляет ваш код? Используйте встроенный профилировщик cProfile. Этот мощный инструмент поможет выявить проблемные участки и ускорить выполнение.
Пример использования:
import hashlib
import cProfile
cProfile.run('hashlib.md5("abcdefghiijkl").digest()')
Что показывает результат:
▪️ Общее время: 4 вызова функций за 0.000 CPU секунд.
▪️ Подробная статистика:
-
ncalls
: количество вызовов.-
tottime
: общее время в функции.-
percall
: время на один вызов.-
cumtime
: кумулятивное время.-
filename:lineno(function)
: расположение функции.Пример вывода:
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {hashlib._md5}
1 0.000 0.000 0.000 0.000 {method 'digest' of '_hashlib.HASH' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Как оптимизировать:
1. Анализируйте
tottime
и cumtime
: ищите функции с наибольшим временем выполнения.2. Сократите вызовы: если ncalls высок, рассмотрите оптимизацию логики.
3. Тестируйте изменения: повторяйте профилирование после оптимизации.
Библиотека питониста #буст
👍14❤3
В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.
⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.
❓Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас.
— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат
После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат.
❗️ Если вас все-таки забанили
— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу
Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.
👾 Спасибо, что активно участвуете в обсуждении наших постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Используйте следующий промпт для генерации юнит-тестов с помощью pytest:
💬 Промпт:
Please generate comprehensive unit tests for the following Python function using pytest.
Requirements:
1. Carefully analyze the function’s functionality, inputs, and outputs.
2. Generate unit tests that cover standard use cases and edge cases.
3. Ensure that the tests are clear, easy to understand, and well-organized.
4. Challenge potential inaccuracies with false outcomes, testing against possible mistakes.
5. Use assertions that test both expected outcomes and exception handling.
[insert function code here]
Что вы получите?
▪️ Полный набор юнит-тестов, охватывающих все аспекты функции.
▪️ Применение лучших практик тестирования.
▪️ Обеспечение надежности кода и упрощение отладки.
✔️ Пример:
Предположим, у нас есть функция, которая вычисляет факториал числа:
def factorial(n: int) -> int:
if n == 0 or n == 1:
return 1
return n * factorial(n-1)
Промпт позволит получить набор юнит-тестов для этой функции:
import pytest
from your_module import factorial
def test_factorial_base_case():
"""Проверка, что факториал 0 и 1 возвращает 1."""
assert factorial(0) == 1
assert factorial(1) == 1
def test_factorial_positive_integers():
"""Проверка факториала для положительных целых чисел."""
assert factorial(2) == 2
assert factorial(3) == 6
assert factorial(4) == 24
assert factorial(5) == 120
def test_factorial_large_number():
"""Проверка факториала для большего числа."""
assert factorial(10) == 3628800
def test_factorial_negative():
"""Проверка, что функция выбрасывает исключение для отрицательных чисел."""
with pytest.raises(ValueError):
factorial(-1)
def test_factorial_edge_case():
"""Проверка факториала для граничного случая."""
assert factorial(6) == 720
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱9❤4🔥4😢3