Библиотека Python разработчика | Книги по питону
Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍 По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq
显示更多📈 Telegram 频道 Библиотека Python разработчика | Книги по питону 的分析概览
频道 Библиотека Python разработчика | Книги по питону (@bookpython) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 18 326 名订阅者,在 技术与应用 类别中位列第 7 317,并在 俄罗斯 地区排名第 36 872 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 18 326 名订阅者。
根据 05 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -86,过去 24 小时变化为 -1,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 6.08%。内容发布后 24 小时内通常能获得 2.60% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 1 114 次浏览,首日通常累积 477 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 2。
- 主题关注点: 内容集中在 numbers, yield, модуль, none, декоратор 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍
По всем вопросам @evgenycarter
РКН clck.ru/3Ko7Hq”
凭借高频更新(最新数据采集于 06 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
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
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
