en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

Библиотека 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 17 967 subscribers, ranking 7 269 in the Technologies & Applications category and 36 632 in the Russia region.

📊 Audience metrics and dynamics

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

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

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 5.47%. Within the first 24 hours after publication, content typically collects 2.71% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 983 views. Within the first day, a publication typically gains 487 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • 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 30 October, 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.

17 967
Subscribers
-624 hours
-297 days
-9830 days
Posts Archive
Существует две встроенные функции, которые позволяют анализировать итерируемые объекты без необходимости писать тривиальные и избыточные циклы for. Это all и any. any возвращает True, если хотя бы одно значение истинно; all возвращает True, только если все значения истинны. Для пустого итерируемого объекта all возвращает True, а any — False. Обе функции особенно полезны в сочетании со списковыми включениями (list comprehensions):

package_broken = any(
    part.is_broken() for part in package.get_parts()
)
package_ok = all(
    part.ok() for part in package.get_parts()
)
Функции any и all зачастую взаимозаменяемы благодаря законам де Моргана. Используй ту, с которой код будет понятнее. 👉@BookPython

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

Иногда нужно создать функцию на основе более универсальной. Например, у функции int() есть параметр base, который мы хотим зафиксировать, чтобы получить новую функцию base2:

>>> int("10")
10
>>> int("10", 2)
2
>>> def base2(x):
...     return int(x, 2)
...
>>> base2("10")
2
functools.partial позволяет сделать то же самое, но точнее и семантически понятнее:

base2 = partial(int, base=2)
Это полезно, когда нужно передать функцию как аргумент другой, более общей функции, но при этом некоторые аргументы должны быть зафиксированы:

>>> map(partial(int, base=2), ["1", "10", "100"])
[1, 2, 4]
Без partial пришлось бы делать так:

>>> map(lambda x: int(x, base=2), ["1", "10", "100"])
[1, 2, 4]
👉@BookPython

В Python нет поддержки асинхронных операций с файлами. Чтобы сделать их неблокирующими, нужно использовать отдельные потоки. Для асинхронного выполнения кода в потоке следует использовать метод loop.run_in_executor. Сторонний модуль aiofiles делает всё это за тебя, предоставляя простой и удобный интерфейс:

async with aiofiles.open('filename', mode='r') as f:
    contents = await f.read()
👉@BookPython

А кто-то ещё пользуется поисковиками? Привет, я Аня, 5 лет работаю на удалёнке, сейчас маркетолог в банке. Недавно задумалась
А кто-то ещё пользуется поисковиками? Привет, я Аня, 5 лет работаю на удалёнке, сейчас маркетолог в банке. Недавно задумалась, раньше, чтобы найти ответ, я открывала Google. Сейчас — задаю вопрос ChatGPT, или Perplexity. И вокруг меня как-будто все резко стали говорить, что поисковиками больше никто не пользуется. На работе, что трафик из нейросетей растет, в каналах – что меняется паттерн поведения. Понаблюдала и тоже заметила, что формулирую запрос не как «рецепт без перца», а как «подскажи, что приготовить, если не ем болгарский перец, капусту и хочу что-то белковое». Что это меняет? Нейросети формируют выдачу иначе: не по SEO, а по сути, контексту и, надеюсь, пользе. Хотя доверять на 100% всё равно им нельзя. ✨ Какие ещё нас ждут изменения и что вообще значит для людей, брендов и общества, читай в канале! Подписаться #реклама 16+ О рекламодателе

>>> bool(datetime(2018, 1, 1).time())
False
>>> bool(datetime(2018, 1, 1, 13, 12, 11).time())
True
До Python 3.5 объекты datetime.time() считались ложными, если они представляли полночь по UTC. Это могло приводить к трудноуловимым ошибкам. В следующих примерах if not может выполниться не потому, что created_time равен None, а потому, что время — полночь.

def create(created_time=None) -> None:
    if not created_time:
        created_time = datetime.now().time()
Можно исправить это, явно проверяя на None:

def create(created_time=None) -> None:
    if created_time is None:
        created_time = datetime.now().time()
👉@BookPython

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

In:

int('୧৬𝟙༣')
Out:

1613
Цифры 0 1 2 3 4 5 6 7 8 9 — это не единственные символы, которые считаются цифрами. Python следует правилам Unicode и считает «цифрами» сотни различных символов. Вот полный список таких символов. Это влияет на такие функции, как int, unicode.isdecimal и даже re.match:

# Пример 1
int('෯')
# Вывод:
9

# Пример 2
'٢'.isdecimal()
# Вывод:
True

# Пример 3
import re
bool(re.match(r'\d', '౫'))
# Вывод:
True
👉@BookPython

Начиная с Python 3.0, при возникновении нового исключения внутри блока except перехваченное исключение автоматически сохраняется в атрибуте __context__ создаваемого исключения. В результате при выводе будут показаны оба исключения:

try:
    1 / 0
except ZeroDivisionError:
    raise ValueError('Zero!')
(most recent call last):
  File "test.py", line 2, in <module>
    1 / 0
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    raise ValueError('Zero!')
ValueError: Zero!
Кроме того, вы можете явно указать причинное исключение, использовав конструкцию raise … from. Тогда в атрибут __cause__ нового исключения будет помещено исходное:

division_error = None

try:
    1 / 0
except ZeroDivisionError as e:
    division_error = e

raise ValueError('Zero!') from division_error
(most recent call last):
  File "test.py", line 4, in <module>
    1 / 0
ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    raise ValueError('Zero!') from division_error
ValueError: Zero!
👉@BookPython

Подарки от семечек Джинн! Хочешь набор любимых семечек "Джинн" или "Белочка"и крутой зонт? Учавствуй в розыгрыше! Подписаться
Подарки от семечек Джинн! Хочешь набор любимых семечек "Джинн" или "Белочка"и крутой зонт? Учавствуй в розыгрыше! Подписаться #реклама О рекламодателе

Все объекты, которые в настоящий момент существуют в памяти интерпретатора, можно получить с помощью gc.get_objects():

In [1]: class A:
   ...:     def __init__(self, x):
   ...:         self._x = x
   ...:
   ...:     def __repr__(self):
   ...:         class_name = type(self).__name__
   ...:         x = self._x
   ...:         return f'{class_name}({x!r})'
   ...:

In [2]: A(1)
Out[2]: A(1)

In [3]: A(2)
Out[3]: A(2)

In [4]: A(3)
Out[4]: A(3)

In [5]: [x for x in gc.get_objects() if isinstance(x, A)]
Out[5]: [A(1), A(2), A(3)]
👉@BookPython

20 000 баллов на сервисы Яндекс Go для бизнеса Подключайтесь к сервису и оптимизируйте бизнес-процессы без бумажной волокиты.
20 000 баллов на сервисы Яндекс Go для бизнеса Подключайтесь к сервису и оптимизируйте бизнес-процессы без бумажной волокиты. Яндекс Go для бизнеса как личный помощник: - организует командировку; - отвезет до работы; - накормит сотрудников. Пока вы экономите время и силы. Узнать больше #реклама 16+ business.go.yandex О рекламодателе Реклама на Яндексе

Иногда нужно выполнить блок кода с несколькими менеджерами контекста:

with open('f') as f:
    with open('g') as g:
        with open('h') as h:
            pass
Начиная с Python 2.7 и 3.1, это можно записать в одной конструкции with:

o = open
with o('f') as f, o('g') as g, o('h') as h:
    pass
Раньше для этого использовали функцию contextlib.nested:

with nested(o('f'), o('g'), o('h')) as (f, g, h):
    pass
Если же число менеджеров контекста заранее неизвестно, лучше подойдёт более продвинутый инструмент. contextlib.ExitStack позволяет открывать любое число контекстов в произвольный момент, но гарантирует корректный выход из них в конце:

with ExitStack() as stack:
    f = stack.enter_context(o('f'))
    g = stack.enter_context(o('g'))
    other = [
        stack.enter_context(o(filename))
        for filename in filenames
    ]
👉@BookPython

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

В Python блок else может располагаться не только после if, но и после for и while. Код внутри else выполняется, если цикл не был прерван оператором break. Обычный способ использования этого — найти что-то в цикле и выйти из него через break, когда нужный элемент найден:

>>> first_odd = None
>>> for x in [2, 3, 4, 5]:
...     if x % 2 == 1:
...         first_odd = x
...         break
... else:
...     raise ValueError('В списке нет нечетных элементов')
...
>>> first_odd
3

>>> for x in [2, 4, 6]:
...     if x % 2 == 1:
...         first_odd = x
...         break
... else:
...     raise ValueError('В списке нет нечетных элементов')
...
...
ValueError: В списке нет нечетных элементов
👉@BookPython

Яндекс Музыка ваша за ответ на 1 вопрос Яндекс Музыка, Книги и Кинопоиск в одной подписке для вас и 3-х ваших близких. Попроб
Яндекс Музыка ваша за ответ на 1 вопрос Яндекс Музыка, Книги и Кинопоиск в одной подписке для вас и 3-х ваших близких. Попробуйте бесплатно👍 Попробовать #реклама 18+ mrqz.me О рекламодателе Реклама на Яндексе

В 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