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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

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

Библиотека Python разработчика | Книги по питону (@bookpython) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 18 328 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 7 307-o'rinni va Rossiya mintaqasida 36 869-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 18 328 obunachiga ega bo‘ldi.

04 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -86 ga, so‘nggi 24 soatda esa -1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 6.07% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 2.61% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 112 marta ko‘riladi; birinchi sutkada odatda 479 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 2 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent numbers, yield, модуль, none, декоратор kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

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

Yuqori yangilanish chastotasi (oxirgi ma’lumot 05 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

18 328
Obunachilar
-124 soatlar
-297 kunlar
-8630 kunlar
Postlar arxiv
Любая выполняющаяся корутина 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 О рекламодателе Реклама на Яндексе