ru
Feedback
Библиотека Python разработчика | Книги по питону

Библиотека Python разработчика | Книги по питону

Открыть в Telegram

Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍 По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq

Больше

📈 Аналитический обзор Telegram-канала Библиотека Python разработчика | Книги по питону

Канал Библиотека Python разработчика | Книги по питону (@bookpython) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 18 329 подписчиков, занимая 7 317 место в категории Технологии и приложения и 36 872 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 18 329 подписчиков.

Согласно последним данным от 05 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -86, а за последние 24 часа — -1, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 6.08%. В первые 24 часа после публикации контент обычно набирает 2.60% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 1 114 просмотров. В течение первых суток публикация набирает 477 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 2.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как numbers, yield, модуль, none, декоратор.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍 По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq

Благодаря высокой частоте обновлений (последние данные получены 06 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

18 329
Подписчики
-124 часа
-277 дней
-8630 день
Архив постов
В Python операторы += и + являются разными. За их поведение отвечают методы __iadd__ и __add__ соответственно.

class A:
    def __init__(self, x):
        self.x = x

    def __iadd__(self, another):
        self.x += another.x
        return self

    def __add__(self, another):
        return type(self)(self.x + another.x)
Если __iadd__ не определён, выражение a += b сводится к простому a = a + b. Обычно разница между += и + в том, что первый изменяет объект, а второй создаёт новый:

>>> a = [1, 2, 3]
>>> b = a
>>> a += [4]
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> a = a + [5]
>>> a
[1, 2, 3, 4, 5]
>>> b
[1, 2, 3, 4]
👉@BookPython

Как за 2 года стать продакт-менеджером с реальными кейсами в портфолио? 🤔 Чтобы создавать классные цифровые продукты не обяз
Как за 2 года стать продакт-менеджером с реальными кейсами в портфолио? 🤔 Чтобы создавать классные цифровые продукты не обязательно иметь  техническое образование. Продакт-менеджер анализирует рынок и аудиторию,  создаёт MVP и проводит тесты, разбирается в юнит-экономике и умеет доносить ценность продукта. Освоить необходимые компетенции, чтобы управлять продуктовой командой,  можно в магистратуре Нетологии и РАНХиГС «Управление ИТ-продуктом». 3 июня пройдёт день открытых дверей,  на котором вы познакомитесь с программой обучения и узнаете:  ◾ где работают менеджеры цифровых продуктов и какие задачи решают; ◾ какие навыки ценят работодатели и какие карьерные треки есть в профессии; ◾ как магистратура помогает в развитии карьеры. А ещё сможете задать вопросы академическому руководителю программы. Встреча будет полезна всем, кто задумывается о получении диплома магистра  и хочет развиваться в одной из самых востребованных профессий в IT. 🔗 Присоединяйтесь:  https://tglink.io/93ce51d95631?erid=2W5zFHgNoX6 

Оператор in можно использовать с генераторами: x in g. Python будет итерировать g, пока x не найдётся или генератор не исчерпается.

>>> def g():
...     print(1)
...     yield 1
...     print(2)
...     yield 2
...     print(3)
...     yield 3
...
>>> 2 in g()
1
2
True
Однако range() делает для вас больше. В нём переопределён магический метод __contains__, который позволяет оператору in работать с сложностью O(1):

In [1]: %timeit 10**20 in range(10**30)
375 ns ± 10.7 ns per loop
Учтите, что это не работает для функции xrange() в Python 2. 👉@BookPython

Класс объекта доступен через атрибут __class__:

>>> [1, 2].__class__
<class 'list'>
Однако более привычный способ получить класс — использовать функцию type. Это также единственный способ, который работает для классов старого стиля.

>>> type([1, 2])
<class 'list'>
Кроме того, если вы хотите проверить, является ли некоторый объект экземпляром данного класса, следует использовать isinstance вместо прямого сравнения:

>>> class A:
...     pass
...
>>> class B(A):
...     pass
...
>>> type(B())
<class '__main__.B'>
>>> isinstance(B(), A)
True
👉@BookPython

Присоединяйтесь к покорителям бездорожья ✅ Лесные чащи ✅ Крутые серпантины ✅ Песчаное побережье Для кого-то это виды с открыт
Присоединяйтесь к покорителям бездорожья ✅ Лесные чащи ✅ Крутые серпантины ✅ Песчаное побережье Для кого-то это виды с открыток, а для владельцев TANK маршрут предстоящего приключения. Вступайте в сообщество TANK в Telegram. Будьте с близкими по духу. Подписаться #реклама 16+ О рекламодателе

Каждый класс Python имеет два «магических» атрибута, которые можно использовать для получения информации о его базовых классах. Первый — __bases__; он возвращает непосредственных родителей класса:

class A:
    pass

class B(A):
    pass

class C(A):
    pass

class D(B, C):
    pass


print(D.__bases__)
# (<class '__main__.B'>, <class '__main__.C'>)
Второй —


class B
он возвращает кортеж со всеми классами, которые задействованы при разрешении методов (отсюда и название), то есть родителей, их родителей и так далее:

print(D.__mro__)
# (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
👉@BookPython

PEP 424 позволяет генераторам и другим итерируемым объектам, у которых нет заранее определённого точного размера, предоставлять «подсказку» о длине. Например, следующий генератор, скорее всего, вернёт примерно 50 элементов:

(x for x in range(100) if random() > 0.5)
Если вы пишете свой итерируемый объект и хотите добавить такую подсказку, определите метод __length_hint__. Если же длина известна точно, лучше использовать len. Если вы используете итерируемый объект и хотите узнать его ожидаемую длину, применяйте функцию operator.length_hint. 👉@BookPython

Канал с заботливыми врачами! Если смех – лучшее лекарство, то здоровье приносит счастье, молодость, энергию! Мы объединили юм
Канал с заботливыми врачами! Если смех – лучшее лекарство, то здоровье приносит счастье, молодость, энергию! Мы объединили юмор и медицину в одном канале. Узнайте мнение врачей о питании, гормонах, витаминах вместе с Доктис! Подписаться #реклама О рекламодателе

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

from itertools import tee

def neighbours(iterable, n):
    neighbours = tee(iterable, n)
    for i, neighbour in enumerate(neighbours):
        for _ in range(i):
            next(neighbour)

    return zip(*neighbours)

fibb = [1, 1, 2, 3, 5, 8, 13, 21]

for a, b, c in neighbours(fibb, 3):
    assert c == a + b
В этом примере мы разветвляем исходный итерируемый объект с помощью tee, затем сдвигаем полученные итераторы с помощью next, чтобы второй начинался со второго элемента исходного итерируемого объекта, а третий — с третьего, и затем объединяем их обратно с помощью zip. 👉@BookPython

Если вы хотите перехватить и IndexError, и KeyError, вы можете и должны использовать LookupError — их общего предка. Это оказывается полезным при работе со сложными вложенными данными:

try:
    db_host = config['databases'][0]['hosts'][0]
except LookupError:
    db_host = 'localhost'
👉@BookPython

🚀 Подборка Telegram каналов для программистов Системное администрирование, DevOps 📌 https://t.me/bash_srv Bash Советы https://t.me/win_sysadmin Системный Администратор Windows https://t.me/sysadmin_girl Девочка Сисадмин https://t.me/srv_admin_linux Админские угодья https://t.me/linux_srv Типичный Сисадмин https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin https://t.me/linux_odmin Linux: Системный администратор https://t.me/devops_star DevOps Star (Звезда Девопса) https://t.me/i_linux Системный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos Системный Администратор https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. https://t.me/sysadminoff Новости Линукс Linux 1C разработка 📌 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/DevLab1C 1С:Предприятие 8 https://t.me/razrab_1C 1C Разработчик https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт https://t.me/rabota1C_rus Вакансии для программистов 1С Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Учим C/C++ на примерах Программирование Python 📌 https://t.me/pythonofff Python академия. https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus https://t.me/java_geek Учим Java на примерах GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка https://t.me/kotlin_lib Подборки полезного материала по Kotlin Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков https://t.me/frontend_sovet Frontend советы, примеры и практика! https://t.me/React_lib Подборки по React js и все что с ним связано Разработка игр 📌 https://t.me/game_devv Все о разработке игр Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Big Data, Machine Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/rust_lib Полезный контент по программированию на Rust https://t.me/golang_lib Библиотека Go (Golang) разработчика https://t.me/itmozg Программисты, дизайнеры, новости из мира IT https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста https://t.me/lifeproger Жизнь программиста. Авторский канал. QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности https://t.me/xakep_2 Хакер Free Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров Математика 📌 https://t.me/Pomatematike Канал по математике https://t.me/phis_mat Обучающие видео, книги по Физике и Математике https://t.me/matgeoru Математика | Геометрия | Логика Excel лайфхак📌 https://t.me/Excel_lifehack https://t.me/mir_teh Мир технологий (Technology World) Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT

Проблема с вызовом repr других объектов в своём собственном методе repr заключается в том, что нельзя гарантировать, что ни один из других объектов не равен self, и вызов не окажется рекурсивным:

In : p = Pair(1, 2)
In : p
Out: Pair(1, 2)
In : p.right = p
In : p
Out: [...]
RecursionError: maximum recursion depth exceeded while calling a Python object
Чтобы просто решить эту проблему, можно использовать декоратор reprlib.recursive_repr:

@reprlib.recursive_repr()
def **repr**(self):
class_name = type(self).**name**
return f'{class_name}({self.left!r}, {self.right!r})'
Теперь всё работает:

In : p = Pair(1, 2)
In : p.right = p
In : p
Out: Pair(1, ...)
👉@BookPython

В Python можно создавать вызываемые объекты не только с помощью функций (def или lambda). Объект также считается вызываемым, если у него реализован магический метод call:

class truncater:
    def __init__(self, length):
        self._length = length

    def __call__(self, s):
        return s[0:self._length]


print(truncater(4)('abcdabcd')) # abcd
Поскольку декоратор по сути является функцией высшего порядка, его также можно реализовать в виде вызываемого объекта вместо функции:

class cached:
    def __init__(self, func):
        self._func = func
        self._cache = {}

    def __call__(self, arg):
        if arg not in self._cache:
            self._cache[arg] = self._func(arg)

        return self._cache[arg]


@cached
def sqr(x):
    return x * x
👉@BookPython

Готовые апартаменты от 5 млн. ₽ в СПб! М. Московская ⚡Мах гарантированный доход 3 200 000 ₽ за 2 года! ⚡Скидка 100 000 ₽ за э
Готовые апартаменты от 5 млн. ₽ в СПб! М. Московская ⚡Мах гарантированный доход 3 200 000 ₽ за 2 года! ⚡Скидка 100 000 ₽ за экскурсию по отелю ⚡Скидка для IT специалистов - 5%! ⚡Рассрочки на 3 года. Первоначальный взнос 500 000 ₽! ⚡Фитнес-зал, бар, коворкинг, лобби, прачечная. 20 минут пешком от метро Московская или Звездная Торопитесь, осталось всего 2 апарта по этой цене! Перейти на сайт #реклама vertical-invest.ru О рекламодателе

В Python объекты хранят свои атрибуты в словарях, доступ к которым можно получить через магический атрибут dict:

class A: pass
a = A()
a.x = 1
a.__dict__
# {'x': 1}
При прямом доступе к этому словарю можно даже создать атрибуты, которые не являются допустимыми идентификаторами Python (то есть получить их через стандартный синтаксис obj.attr не получится):

a.__dict__[' '] = ' '
getattr(a, ' ')
# ' '
Можно также попросить Python хранить атрибуты непосредственно в памяти (как у простых структур C) с помощью slots. Это экономит память и немного ускоряет доступ к атрибутам, так как не происходит поиска в словаре.

class Point:
    __slots__ = ['x', 'y']
Есть несколько моментов, которые нужно помнить при использовании slots. Во-первых, нельзя задавать атрибуты, не указанные в slots. Во-вторых, если класс наследуется от класса с slots, его slots не перекрывают родительские, а добавляются к ним:

class Parent: __slots__ = ['x']
class Child(Parent): __slots__ = ['y']
c = Child()
c.x = 1
c.y = 2
В-третьих, нельзя наследоваться сразу от двух разных классов с непустыми slots, даже если они совпадают. Помни, что slots предназначены для оптимизации, а не для ограничения набора атрибутов. 👉@BookPython

Регистрируйтесь на вебинар SIEM UserGate 💻Расскажет о том, как экосистема и SIEM UserGate помогает бороться с фишинговыми атаками в рамках демонстрации конкретного кейса. На вебинаре будет: - Вступительное слово - Экспертиза UserGate и сценарий конкретного кейса - Демонстрация кейса защиты от фишинговой атаки - Ответы на вопросы 👌Расскажем, как защитить вашу компанию. Регистрируйтесь — будет интересно! Зарегистрироваться #реклама 16+ webinar.usergate.com О рекламодателе

Python позволяет работать с путями файловой системы через модуль os.path. Модуль содержит множество функций, которые обрабатывают строки как пути и выполняют полезные операции, такие как объединение путей и прочее:

>>> import os.path
>>> os.path.join('/usr', 'local')
'/usr/local'
>>> os.path.dirname('/var/log')
'/var'
Однако, начиная с Python 3.4, доступен новый модуль pathlib, предлагающий объектно-ориентированный подход:

>>> from pathlib import Path
>>> Path('/usr') / Path('local')
PosixPath('/usr/local')
>>> Path('/usr') / 'local'
PosixPath('/usr/local')
>>> Path('/var/log').parent
PosixPath('/var')
>>> Path('/var/log').parent.name
'var'
👉@BookPython

Розыгрыш книги «Мода в кино» от СШД Розыгрыш Разыгрываем книгу Мода в кино. От Givenchy для «Завтрак у Тиффани» до Prada в «Отель Гранд Будапешт» | Лаверти Кристофер Книга «Мода в кино» — это настоящая энциклопедия культовых образов, дизайнерских решений и экранной эстетики. В ней содержатся не просто красивые кадры, а глубокое исследование: как костюм создаёт персонажа и остаётся в истории. Эскизы, кадры, закулисье и невероятные фэшн-имена: от Chanel до Alexander McQueen. Кристофер Лаверти — журналист и фэшн-аналитик, создатель и редактор отмеченного премиями сайта Clothes on Film. Как участвовать? 👌1. Быть подписанным на наш канал в Telegram 2. Написать в комментариях книга ✨Итоги 31 мая Подписаться #реклама 16+ О рекламодателе

Самые интересные фичи Python 3.12, которые уже можно тестить и встраивать в проекты 1️⃣ Улучшенный match-case Теперь можно использовать «захват» значений прямо в паттернах:

def http_status(code):
    match code:
        case 200 | 201 | 202 as ok:
            return f"Success: {ok}"
        case 400 as bad | 404 as bad:
            return f"Client error: {bad}"
        case _:
            return "Other"
Большая гибкость и меньше «шаблонных» переменных! 2️⃣ Новый оператор f”{…=}" для отладки Позволяет вывести и имя, и значение переменной в одной строке:

user = "Alice"
age = 29
print(f"{user=}, {age=}")  
# Выведет: user='Alice', age=29
Больше никаких лишних print("user", user)! 3️⃣ Оптимизация работы с памятью и скорость Команда CPython продолжает ускорение интерпретатора: * Выделение объектов стало быстрее * Сборщик мусора реже «паузит» приложение Это особенно заметно в тяжёлых сервисах и бэкендах. 4️⃣ Новые API для типов Добавили typing.Self и более гибкие Generic-типизации:

from typing import Self

class Builder:
    def set_name(self, name: str) -> Self:
        self.name = name
        return self

b = Builder().set_name("Demo")
Удобнее писать цепочки вызовов без «# type: ignore»! 💡 Что попробовать прямо сейчас? 1. Установить Python 3.12 pre-release:

   pyenv install 3.12.0b4
   
2. Переписать пару функций с match-case. 3. Пощупать f"{var=}" в дебаге. 👉@BookPython