Библиотека Python разработчика | Книги по питону
Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍 По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq
Mostrar más📈 Análisis del canal de Telegram Библиотека Python разработчика | Книги по питону
El canal Библиотека Python разработчика | Книги по питону (@bookpython) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 18 326 suscriptores, ocupando la posición 7 317 en la categoría Tecnologías y Aplicaciones y el puesto 36 872 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 18 326 suscriptores.
Según los últimos datos del 05 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -86, y en las últimas 24 horas de -1, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 6.08%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 2.60% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 1 114 visualizaciones. En el primer día suele acumular 477 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 2.
- Intereses temáticos: El contenido se centra en temas clave como numbers, yield, модуль, none, декоратор.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍
По всем вопросам @evgenycarter
РКН clck.ru/3Ko7Hq”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 06 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
import numpy as np
import time
def sum_of_squares(n):
result = 0
for i in range(n):
result += i ** 2
return result
n = 10**7
start = time.time()
sum_of_squares(n)
print("Обычный Python:", time.time() - start)
Теперь ускорим её с помощью Numba:
from numba import jit
@jit(nopython=True)
def sum_of_squares_numba(n):
result = 0
for i in range(n):
result += i ** 2
return result
start = time.time()
sum_of_squares_numba(n)
print("С Numba:", time.time() - start)
📊 Результат:
✅ Код на чистом Python выполняется ~5-10 раз медленнее, чем с Numba.
✅ Numba особенно полезна для математических вычислений и обработки массивов.
✅ Простая аннотация @jit(nopython=True) уже даёт мощный прирост скорости!
Где применять?
✔ Численные расчёты
✔ Обработку данных
✔ Алгоритмы машинного обучения
Попробуйте Numba и напишите в комментариях, удалось ли вам ускорить свой код!
👉@BookPythonpip install rich
2️⃣ Typer – современный способ писать CLI-приложения. Работает на основе аннотаций типов и делает разработку CLI удобнее.
📌 pip install typer
3️⃣ Pendulum – альтернатива datetime, но с удобным API и встроенной поддержкой часовых поясов.
📌 pip install pendulum
4️⃣ HTTPX – асинхронный клиент для работы с HTTP-запросами. Поддерживает async/await, в отличие от requests.
📌 pip install httpx
5️⃣ Pydantic – мощный инструмент для валидации данных и работы с моделями. Особенно полезен в FastAPI.
📌 pip install pydantic
6️⃣ Poetry – современный менеджер зависимостей. Упрощает работу с виртуальными окружениями и пакетами.
📌 pip install poetry
7️⃣ Loguru – удобная альтернатива стандартному logging. Позволяет логировать без лишнего кода.
📌 pip install loguru
8️⃣ FastAPI – один из самых быстрых Python-фреймворков для создания API. Использует аннотации типов и async/await.
📌 pip install fastapi
9️⃣ Tqdm – библиотека для удобных progress-bar'ов в терминале. Незаменима при обработке больших данных.
📌 pip install tqdm
🔟 Black – автоматический форматтер кода, который придерживается строгого стиля. Просто устанавливаешь – и больше не думаешь о стиле кода.
📌 pip install black
Какую из этих библиотек вы уже используете? А может, есть другие любимые инструменты? Делитесь в комментариях! 🔥
👉@BookPythonmultiprocessing.Pool — это то, что вам нужно. Он создает несколько процессов и автоматически распределяет между ними задачи. Просто создайте пул с Pool(number_of_processes) и выполните p.map с списком входных данных.
import math
from multiprocessing import Pool
inputs = [i ** 2 for i in range(100, 130)]
def f(x):
return len(str(math.factorial(x)))
# Однопоточное выполнение
%timeit [f(x) for x in inputs]
# 1.44 s ± 19.2 ms per loop (...)
# Параллельное выполнение с 4 процессами
p = Pool(4)
%timeit p.map(f, inputs)
# 451 ms ± 34 ms per loop (...)
Также можно не указывать параметр number_of_processes, по умолчанию он равен количеству ядер CPU в системе.
👉@BookPython1, 2, 3. Пока что все понятно. А как насчет кортежа, содержащего только один элемент? Вы просто добавляете завершающую запятую к единственному значению: 1,. Это выглядит несколько некрасиво и может быть подвержено ошибкам, но логика понятна.
А как насчет пустого кортежа? Это просто запятая? Нет, это (). Значит ли это, что круглые скобки создают кортеж так же, как и запятые? Нет, это не так. (4) — это не кортеж, это просто 4.
Пример:
a = [
(1, 2, 3),
(1, 2),
(1),
(),
]
[type(x) for x in a]
# Результат: [tuple, tuple, int, tuple]
Чтобы все стало еще более запутанным, литералы кортежей часто требуют дополнительных круглых скобок. Если вы хотите, чтобы кортеж был единственным аргументом функции, то f(1, 2, 3) не сработает по очевидной причине — вместо этого нужно написать f((1, 2, 3)).
👉 @BookPythonmap, filter, reduce ⚡
Привет, друзья! Сегодня расскажу о том, как можно ускорить выполнение кода, заменяя обычные циклы на встроенные функции map(), filter() и reduce(). Эти инструменты позволяют писать более компактный, читаемый и быстрый код.
✅ map()
Функция map() применяется к каждому элементу последовательности и возвращает новый итератор.
❌ Обычный способ:
numbers = [1, 2, 3, 4, 5]
squared = []
for num in numbers:
squared.append(num ** 2)
✅ Быстрее с map():
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
За счёт того, что map() использует C-оптимизированную логику, код выполняется быстрее.
✅ filter()
Фильтрует элементы последовательности по заданному условию.
❌ Медленный вариант:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = []
for num in numbers:
if num % 2 == 0:
evens.append(num)
✅ Быстрее с filter():
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = list(filter(lambda x: x % 2 == 0, numbers))
Такой код читается легче и работает быстрее.
✅ reduce()
Позволяет выполнять кумулятивные операции (например, суммирование, умножение).
❌ Классический способ:
numbers = [1, 2, 3, 4, 5]
product = 1
for num in numbers:
product *= num
✅ Быстрее с reduce():
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
Этот метод полезен, если нужно свести список к одному значению.
💡 Важно: reduce() чаще заменяют sum() или math.prod(), но для сложных операций он остаётся полезным.
Такие функции помогают писать код, который не только быстрее работает, но и легче читается.
👉 @BookPythonbool, когда используется в if, bool, not и других логических операциях.
Ложными (False) считаются следующие объекты: None, False, 0 любого типа, а также пустые коллекции ("", [], {} и т. д.), включая пользовательские коллекции с методом __len__, если __len__ возвращает 0.
Можно также определить пользовательскую проверку логического значения для своих объектов, используя магический метод __bool__:
class Rectangle:
def __init__(self, width, height):
self._w = width
self._h = height
def __bool__(self):
return bool(self._w and self._h)
print(bool(Rectangle(2, 3))) # True
print(bool(Rectangle(2, 0))) # False
print(bool(Rectangle(0, 2))) # False
Обратите внимание, что в Python 2 аналогом __bool__ является метод __nonzero__.
👉@BookPythonpandas?
Сегодня я покажу вам несколько способов ускорить работу с pandas, если у вас большие объемы данных.
1️⃣ Используйте categorical тип данных
Если у вас есть столбцы с повторяющимися строковыми значениями (например, категории товаров), лучше преобразовать их в category:
df["category"] = df["category"].astype("category")
Это снизит использование памяти и ускорит фильтрацию.
2️⃣ Читайте файлы быстрее
Стандартный pandas.read_csv() не всегда работает быстро. Можно попробовать:
- Указать dtype столбцов
- Использовать usecols для загрузки только нужных колонок
- Применить pyarrow или fastparquet при работе с Parquet-файлами
df = pd.read_csv("data.csv", dtype={"id": "int32", "name": "category"}, usecols=["id", "name"])
3️⃣ Используйте numba и vectorize()
Если у вас есть сложные вычисления, попробуйте numba:
from numba import jit
@jit(nopython=True)
def expensive_function(x):
return x**2 + 10*x + 5
df["new_col"] = df["value"].apply(expensive_function)
Это ускорит обработку в разы!
4️⃣ modin вместо pandas
Если у вас мощный многопоточный процессор, попробуйте modin:
import modin.pandas as pd
df = pd.read_csv("data.csv")
Этот модуль использует все ядра процессора и ускоряет вычисления.
Какие еще трюки используете вы? Делитесь в комментариях!
👉@BookPythonfor, list или другими механизмами, которые выполняют итерацию за вас. Однако в некоторых редких случаях вам может понадобиться получить итератор из итерируемого объекта явно. Правильный способ сделать это — использовать встроенную функцию iter (которая использует методы __iter__ или __getitem__ объекта для получения итератора):
part_sizes = [3, 2, 5]
iterator = iter(range(100))
result = []
for size in part_sizes:
part = []
for _ in range(size):
part.append(next(iterator))
result.append(part)
assert result == [
[0, 1, 2],
[3, 4],
[5, 6, 7, 8, 9],
]
Забавный факт: iter можно использовать совершенно другим способом. Вместо создания итератора из объекта, он также может создавать итератор из функции (или любого вызываемого объекта). Если вызвать iter с двумя аргументами, первый должен быть вызываемым объектом, а второй — контрольным значением (sentinel). При каждом вызове __next__ созданный итератор будет вызывать переданную функцию без аргументов. Если возвращённое значение равно sentinel, возбуждается исключение StopIteration; в противном случае возвращается полученное значение.
Обычно это удобно для чтения строк до появления определённого маркера:
In : list(iter(input, 'END'))
a
b
END
Out: ['a', 'b', '']
👉@BookPython__getitem__:
class Iterable:
def __getitem__(self, i):
if i > 10:
raise IndexError
return i
print(list(Iterable()))
Вывод:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]Второй способ — определить метод
__iter__, который возвращает итератор. Итератор — это объект, имеющий метод __next__, который при каждом вызове возвращает следующее значение из исходного итерируемого объекта:
class Iterator:
def __init__(self):
self._i = 0
def __next__(self):
i = self._i
if i > 10:
raise StopIteration
self._i += 1
return i
class Iterable:
def __iter__(self):
return Iterator()
print(list(Iterable()))
Вывод:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]Обычно итератор также имеет метод
__iter__, который просто возвращает self. Это позволяет самому итератору быть итерируемым, то есть большинство итераторов также являются итерируемыми объектами.
👉@BookPythonprint(), когда надо отобразить таблицу, JSON или логи с цветами. Rich делает консольные приложения красивыми!
from rich import print
print({"name": "Alice", "age": 25})
📌 Установка: pip install rich
2️⃣ IceCream – Удобный отладочный принт
Если вы устали писать print(f"var={var}"), попробуйте icecream (ic). Он показывает и имя переменной, и её значение, и даже место вызова!
from icecream import ic
x = 42
ic(x) # x: 42
📌 Установка: pip install icecream
3️⃣ Pydantic – Валидация данных без боли
Больше не нужно вручную проверять типы и структуру входных данных. Pydantic делает это автоматически.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name="Alice", age="25") # ❌ Ошибка, age должен быть int
📌 Установка: pip install pydantic
4️⃣ Typer – Быстрое создание CLI
Хотите создать CLI-приложение, но не любите argparse? Typer использует аннотации типов и делает это проще.
import typer
def main(name: str):
print(f"Hello {name}!")
if __name__ == "__main__":
typer.run(main)
📌 Установка: pip install typer
5️⃣ loguru – Логирование без боли
Более мощная альтернатива стандартному logging, с удобным API и красивым выводом.
from loguru import logger
logger.info("Это информационное сообщение!")
📌 Установка: pip install loguru
Какими инструментами пользуетесь вы? Делитесь в комментариях! ⬇
👉 @BookPython
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
