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

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

Открыть в Telegram

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

Больше

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

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

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

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

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

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

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

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

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

18 328
Подписчики
-124 часа
-297 дней
-8630 день
Архив постов
Любая выполняющаяся корутина asyncio может быть отменена с помощью метода cancel(). В корутину будет выброшено исключение CancelledError, что приведёт к её завершению, а также завершению всех оборачивающих её корутин, если только ошибка не будет перехвачена и подавлена. CancelledError является подклассом Exception, а значит, его можно случайно перехватить конструкцией try ... except Exception, которая предназначена для отлова «любых ошибок». Чтобы безопасно это обработать внутри корутины, приходится писать примерно так:

try:
    await action()
except asyncio.CancelledError:
    raise
except Exception:
    logging.exception('action failed')
👉@BookPython

Хочешь зарабатывать, но не хочешь управлять бизнесом? Работаем — за тебя 🗒 Договор 💻 Бизнес под ключ ✨ Команда управляет Ты получаешь выплаты Всё прозрачно, всё работает. Смотри кейсы в нашем канале — мы показываем как зарабатывать без управления бизнесом! Написать в Telegram #реклама click.tgtrack.ru О рекламодателе

Условное использование менеджеров контекста обычно доставляет неудобства: нельзя просто разместить with внутри блока if, не заключив туда весь блок with. Это часто приводит к дублированию кода:

def print_whole_file(
    *,
    path: Optional[str] = None,
    file_obj: Optional[TextIO] = None
):
    assert path or file_obj

    if path:
        with open(path) as f:
            print(f.read(), end='')
    else:
        print(file_obj.read(), end='')
Способ борьбы с этой проблемой — использовать ExitStack и вызывать enter_context внутри if:

def print_whole_file(
    *,
    path: Optional[str] = None,
    file_obj: Optional[TextIO] = None
):
    assert path or file_obj

    with ExitStack() as stack:
        if path:
            file_obj = stack.enter_context(
                open(path)
            )

        print(file_obj.read(), end='')
Однако более очевидный способ достичь того же — использовать тривиальные менеджеры контекста, которые ничего не делают, когда они не нужны, вместо «настоящих». Начиная с Python 3.7, их можно получить с помощью contextlib.nullcontext:

def print_whole_file(
    *,
    path: Optional[str] = None,
    file_obj: Optional[TextIO] = None
):
    assert path or file_obj

    if path:
        context = open(path)
    else:
        context = nullcontext(file_obj)

    with context as f:
        print(f.read(), end='')
👉@BookPython

Пожалуй лучший ЖК в Архызе - ЖК "Горы Здесь" Жилой комплекс «Горы здесь». Настоящий альпийский уголок, где роскошь и комфорт сочетается с природной красотой. Не упустите шанс купить недвижимость в одном из лучших горных курортах Архыза. Безупречная экология, лучшие туристические места... Лучшая цена от застройщика на старте продаж! Перейти на сайт Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО "СЗ ИНВЕСТГРУПП". Финансовые услуги оказывает: ПАО Банк ВТБ, Банк ГПБ (АО), ООО "СЗ ИНВЕСТГРУПП". #реклама горыздесь.рф О рекламодателе

itertools.tee() создаёт несколько итераторов из одного. Это может быть полезно, если нескольким потребителям нужно читать один и тот же поток. Пример:

In : a, b, c = tee(iter(input, ''), 3)

In : next(a), next(c)
FIRST
Out: ('FIRST', 'FIRST')

In : next(a), next(b)
SECOND
Out: ('SECOND', 'FIRST')

In : next(a), next(b), next(c)
THIRD
Out: ('THIRD', 'SECOND', 'SECOND')
Данные, которые ещё не были использованы всеми итераторами, сохраняются в памяти. Если часть созданных итераторов ещё не была начата в тот момент, когда другой уже дошёл до конца, это означает, что все сгенерированные элементы будут храниться в памяти для будущего использования. В таком случае проще и эффективнее использовать list(iter(input, '')), чем tee. 👉@BookPython

Маркетинг без теорий и «тестов на глазок» Если ты запускаешь рекламу «на глазок» — это не тест. Это активность В «Маркетинг з
Маркетинг без теорий и «тестов на глазок» Если ты запускаешь рекламу «на глазок» — это не тест. Это активность В «Маркетинг за ширмой» я делюсь: ⚡ Фреймворками, которые реально применяю ⚡ Разборами, как одно изменение дало +43% к заявкам ⚡ Чек-листами, которые упрощают аналитику Всё по делу. Без инфо-ваты. Без заигрываний 📱 Загляни в Telegram-канал Узнать больше #реклама 16+ О рекламодателе

В Python функция range() определяет все целые числа в полуоткрытом интервале. То есть range(2, 10) математически означает [2, 10), или, говоря на языке Python: [2, 3, 4, 5, 6, 7, 8, 9]. Несмотря на асимметрию, это не ошибка и не случайность. В этом есть логика: такой подход позволяет "склеивать" два соседних интервала без риска ошибиться на единицу: [a, c) = [a, b) + [b, c) Для сравнения, если бы использовались закрытые интервалы, получалось бы так: [a, c] = [a, b] + [b+1, c] Эта же идея объясняет, почему индексация начинается с нуля: [0, N) содержит ровно N элементов. Эдсгер Дейкстра написал на эту тему отличную статью ещё в 1982 году. 👉@BookPython

Google Meet перестал работать в России: что дальше? 📞🏃‍♂️ Сперва в Telegram и WhatsApp заблокировали звонки, а теперь и Goo
Google Meet перестал работать в России: что дальше? 📞🏃‍♂️ Сперва в Telegram и WhatsApp заблокировали звонки, а теперь и Google Meet сбоит. Видеозвонки не проходят ни с телефонов, ни с ПК. Для бизнеса это означает: - сорванные онлайн-совещания и встречи с клиентами; - срыв собеседований и переговоров с подрядчиками; - потерю времени и простои в коммуникациях команд; - срочный поиск альтернативы для видеозвонков и онлайн-летучек. Что делать бизнесу, когда зарубежные сервисы один за другим перестают работать в России? ✅ В МТС Линк: видеозвонки, чаты, онлайн-доски и совещания без сбоев и ограничений 40 минут; дата-центры в России, соответствие 152-ФЗ и 149-ФЗ; готовые интеграции; русскоязычная техподдержка 24/7. Проверьте, подходит ли МТС Линк вашей компании Узнать больше #реклама 16+ mts-link.ru О рекламодателе

Начиная с Python 3.5, стало возможно использовать распаковку в литералах словарей и списков. Пример:

In : {**{'a': 1}, 'b': 2, **{'c': 3}}
Out: {'a': 1, 'b': 2, 'c': 3}

In : [1, 2, *[3, 4]]
Out: [1, 2, 3, 4]
Для словарей эта форма ещё более мощная, чем функция dict, так как позволяет переопределять значения:

In : {**{'a': 1, 'b': 1}, 'a': 2, **{'b': 3}}
Out: {'a': 2, 'b': 3}
👉@BookPython

about:cloud – infrastructure надвигается с серией митапов Четыре города — Санкт-Петербург, Новосибирск, Екатеринбург и Москва
about:cloud – infrastructure надвигается с серией митапов Четыре города — Санкт-Петербург, Новосибирск, Екатеринбург и Москва — организуют мероприятия для инженеров, работающих с облачными сервисами и инфраструктурой. Участники смогут узнать о реальных технических кейсах Yandex Cloud, обсудить подходы к построению инфраструктурных сервисов и обменяться опытом. Что будет: доклады от разработчиков Yandex Cloud и Yandex Infrastructure, обсуждение практических кейсов, возможность задать вопросы спикерам напрямую. about:cloud – infrastructure объединяет разработчиков, архитекторов и сетевых инженеров — тех, кто ежедневно работает с облаком и строит их основу. Программа на митапах разная, смотрите на сайте: — 28.08 — Санкт-Петербург (офлайн) → Сайт и регистрация — 04.09 — Новосибирск (офлайн) → Сайт и регистрация — 11.09 — Екатеринбург (офлайн) → Сайт и регистрация — 16.10 — Москва (офлайн + онлайн) → Сайт и регистрация Присоединяйтесь к сообществу инженеров и архитекторов — регистрируйтесь на сайте.

В списковых включениях (list comprehensions) может быть больше одного цикла for и условия if:

In : [(x, y) for x in range(3) for y in range(3)]
Out: [
    (0, 0), (0, 1), (0, 2),
    (1, 0), (1, 1), (1, 2),
    (2, 0), (2, 1), (2, 2)
]

In : [
    (x, y)
    for x in range(3)
    for y in range(3)
    if x != 0
    if y != 0
]
Out: [(1, 1), (1, 2), (2, 1), (2, 2)]
Кроме того, любое выражение внутри for и if может использовать все переменные, которые были определены ранее:

In : [
    (x, y)
    for x in range(3)
    for y in range(x + 2)
    if x != y
]
Out: [
    (0, 1),
    (1, 0), (1, 2),
    (2, 0), (2, 1), (2, 3)
]
Можно смешивать if и for в любом порядке:

In : [
    (x, y)
    for x in range(5)
    if x % 2
    for y in range(x + 2)
    if x != y
]
Out: [
    (1, 0), (1, 2),
    (3, 0), (3, 1), (3, 2), (3, 4)
]
👉@BookPython

Розыгрыш книги «Peter Lindbergh. Dior. 40th Ed.» от СШД Разыгрываем книгу «Peter Lindbergh. Dior. 40th Ed. | Peter Lindbergh, Harrison Martin». Уникальное издание с 165 ранее не публиковавшимися снимками от Питера Линдберга и Хуана Гатти. В книге — 70 лет истории Dior: от легендарного костюма 1947 года до современных коллекций Марии Грации Кьюри, запечатлённых на фоне Таймс-сквер. Чёрно-белые и цветные работы Линдберга раскрывают текстуры, силуэты и душу каждой модели. Это больше чем книга — визуальная хроника сотрудничества двух легенд: Dior и мастера фотографии. 👌Условия участия: ✅Подписаться на наш канал в Telegram ✅ Оставить комментарий «СШД» ⚡Итоги — 31 августа. Узнать больше #реклама 16+ О рекламодателе

Символ \ в обычной строке имеет специальное значение. \t — это символ табуляции, \r — возврат каретки и так далее. Можно использовать *сырые строки* (raw-strings), чтобы отключить это поведение. r'\t' — это просто обратный слэш и буква t. Очевидно, что нельзя использовать ' внутри r'...'. Однако его всё ещё можно экранировать через \, но при этом сам \ сохраняется в строке:

>>> print(r'It\'s insane!')
It\'s insane!
Хочешь, я добавлю перевод и к коду, чтобы было ещё понятнее?

Некоторый код, который вы используете, может выводить данные, представляющие для вас интерес, в stdout, вместо того чтобы предоставлять какой-то API, пригодный для использования в программе (например, возвращать строку). Вместо того чтобы рефакторить такой код, вы можете использовать менеджер контекста contextlib.redirect_stdout, который позволяет временно перенаправить stdout в любой объект, похожий на файл. В связке с io.StringIO это позволяет захватывать вывод в переменную.

from contextlib import redirect_stdout
from io import StringIO

s = StringIO()
with redirect_stdout(s):
    print(42)

print(s.getvalue())
Также доступен contextlib.redirect_stderr для перенаправления sys.stderr. 👉@BookPython

Готовимся к школе с Wildberries! На WB вы найдете всё необходимое для учебы: рюкзаки, форма, канцтовары, техника и тысячи дру
Готовимся к школе с Wildberries! На WB вы найдете всё необходимое для учебы: рюкзаки, форма, канцтовары, техника и тысячи других товаров по суперценам!⚡ Подготовка к школе без лишних трат!!📚🎓 Посмотреть каталог #реклама 16+ wildberries.ru О рекламодателе

Оператор 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

Привет! Я Ирина, твой личный гид по путешествиям! Мой канал поможет тебе понять, что: 1. Путешествие - это реально!🚗 2. Можн
Привет! Я Ирина, твой личный гид по путешествиям! Мой канал поможет тебе понять, что: 1. Путешествие - это реально!🚗 2. Можно совмещать работу, путешествие и троих детей 2. Не нужно копить годами, чтобы исполнить свою мечту! 💰 3. Самый лучший момент - это сейчас! Подписывайся и начинай путешествовать вместе со мной❤️ Подписаться #реклама 16+ О рекламодателе

Оператор 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

В Python можно переопределить оператор квадратных скобок ([]), реализовав магический метод __getitem__. Вот так можно создать объект, который виртуально содержит бесконечное количество повторяющихся элементов:

class Cycle:
    def __init__(self, lst):
        self._lst = lst

    def __getitem__(self, index):
        return self._lst[index % len(self._lst)]

print(Cycle(['a', 'b', 'c'])[100])  # 'b'
Необычность здесь в том, что оператор [] поддерживает особый синтаксис. Его можно использовать не только так — [2], но и так — [2:10], [2:10:2], [2::2] или даже [:]. Обычно это интерпретируется как [start:stop:step], но вы можете задать любую логику для своих объектов. Что же передаётся в параметр index метода __getitem__, если использовать такой синтаксис? Для этого в Python существуют объекты slice.

class Inspector:
    def __getitem__(self, index):
        print(index)

Inspector()[1]
# 1

Inspector()[1:2]
# slice(1, 2, None)

Inspector()[1:2:3]
# slice(1, 2, 3)

Inspector()[:]
# slice(None, None, None)
Можно даже комбинировать кортежи и срезы:

Inspector()[:, 0, :]
# (slice(None, None, None), 0, slice(None, None, None))
Объект slice сам по себе ничего не делает — он просто хранит атрибуты start, stop и step:

s = slice(1, 2, 3)
s.start  # 1
s.stop   # 2
s.step   # 3
👉@BookPython

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Кни
Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте бесплатно❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе