Библиотека Python разработчика | Книги по питону
Погружение в 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 321 subscribers, ranking 7 317 in the Technologies & Applications category and 36 872 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 18 321 subscribers.
According to the latest data from 05 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.08%. Within the first 24 hours after publication, content typically collects 2.60% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 114 views. Within the first day, a publication typically gains 477 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 07 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.
1
3 7
5 4 9 8
15 16 17 18 19
В бинарной куче сложность операций вставки и извлечения составляет O(log n).
Обычный способ хранения полного бинарного дерева в памяти — это массив, где дочерние элементы для x[i] находятся в x[2*i+1] и x[2*i+2].
[1, 3, 7, 5, 4, 9, 8, 15, 16, 17, 18, 19]
В Python нет бинарной кучи в виде класса, но предоставляется ряд функций, которые позволяют использовать список как бинарную кучу. Эти функции находятся в модуле heapq.
In [1]: from heapq import *
In [2]: heap = [3,2,1]
In [3]: heapify(heap)
In [4]: heap
Out[4]: [1, 2, 3]
In [5]: heappush(heap, 0)
In [6]: heap
Out[6]: [0, 1, 3, 2]
In [7]: heappop(heap)
Out[7]: 0
In [8]: heap
Out[8]: [1, 2, 3]
👉@BookPythonNotImplementedError:
def human_name(self):
raise NotImplementedError
Хотя этот способ довольно популярен и даже поддерживается IDE (PyCharm считает такой метод абстрактным), у него есть недостаток. Ошибка возникает только при вызове метода, а не при создании экземпляра класса.
Используйте abc, чтобы избежать этой проблемы:
from abc import ABCMeta, abstractmethod
class Service(metaclass=ABCMeta):
@abstractmethod
def human_name(self):
pass
👉@BookPython(arg=value), а не просто (value).
Это может быть полезно, чтобы предотвратить вызовы функции вроде: grep(text, pattern, True, False, True), где True, False, True на самом деле означают: игнорировать регистр, не инвертировать совпадение, шаблон — регулярное выражение Perl. Было бы неплохо заставить использовать единственный разумный вид вызова:
grep(text, pattern,
ignore_case=True,
perl_regexp=True)
Чтобы достичь этого результата, следует разместить обязательные именованные аргументы после аргумента переменной длины (также известного как *args):
def grep(
text, pattern, *args,
ignore_case=False,
invert_match=False,
perl_regexp=False,
):
pass
Если вам не нужен *args (как в примере), просто замените его на одиночную звездочку:
def grep(
text, pattern, *,
ignore_case=False,
invert_match=False,
perl_regexp=False,
):
pass
👉@BookPythonIndexError, так и KeyError, вы можете и должны использовать LookupError, их общего предка. Это оказалось полезным при доступе к сложным вложенным данным.
try:
db_host = config['databases'][0]['hosts'][0]
except LookupError:
db_host = 'localhost'
👉@BookPython>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
Вы когда-нибудь задумывались, почему при попытке выйти из интерактивного Python с помощью простого exit или quit появляется это сообщение? Решение довольно неожиданное, но изящное. Это не специальный случай для интерактивной оболочки, она просто показывает представление каждого вычисленного результата, а эта строка - просто представление функции exit.
Строго говоря, вы не должны использовать exit в своих повседневных проектах, поскольку она была создана специально для интерактивной оболочки. Вместо этого используйте sys.exit().
👉@BookPython@this_one) — это способ вызова функции высшего порядка. Раньше людям приходилось делать это вручную:
# prior to Python 2.4
def query():
pass
query = atomic(query)
# now
@atomic
def query():
pass
По сути, идентификатор после @ — это то, что будет вызвано. Можно также использовать идентификатор со скобками (@atomic(skip_errors=True)), что обычно используется для параметризированных декораторов. Также работает что-то вроде @decorators.db.atomic(True). Кажется, что любой вид выражения можно использовать в качестве декоратора, но это не так. После @ должен следовать один «дот-идентификатор» (например, decorators.atomic) и, при необходимости, одна пара скобок с аргументами (как вызов функции). Так что @decorators[2] использовать нельзя. Вот строка из грамматики Python:
decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
👉@BookPython
Available now! Telegram Research 2025 — the year's key insights 
