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

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

Open in Telegram

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

Show more

📈 Analytical overview of Telegram channel Библиотека Python разработчика | Книги по питону

Channel Библиотека Python разработчика | Книги по питону (@bookpython) in the Russian language segment is an active participant. Currently, the community unites 18 328 subscribers, ranking 7 307 in the Technologies & Applications category and 36 869 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 18 328 subscribers.

According to the latest data from 04 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -86 over the last 30 days and by -1 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 6.07%. Within the first 24 hours after publication, content typically collects 2.61% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 112 views. Within the first day, a publication typically gains 479 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 2.
  • Thematic interests: Content is focused on key topics such as numbers, yield, модуль, none, декоратор.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍 По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq

Thanks to the high frequency of updates (latest data received on 05 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

18 328
Subscribers
-124 hours
-297 days
-8630 days
Posts Archive
Любая выполняющаяся корутина 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 О рекламодателе Реклама на Яндексе