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

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

رفتن به کانال در Telegram

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

نمایش بیشتر

📈 تحلیل کانال تلگرام Библиотека Python разработчика | Книги по питону

کانال Библиотека Python разработчика | Книги по питону (@bookpython) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 18 328 مشترک است و جایگاه 7 307 را در دسته فناوری و برنامه‌ها و رتبه 36 869 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 18 328 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 04 ژوئن, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -86 و در ۲۴ ساعت گذشته برابر -1 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 6.07% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 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 О рекламодателе Реклама на Яндексе