Counter из модуля collections — это удобный инструмент для подсчёта количества элементов в последовательностях. Работает как словарь, где ключи — элементы, а значения — их количество.from collections import Counter
# Подсчёт частоты символов
text = "abracadabra"
counter = Counter(text)
print(counter) # ➔ Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
# Наиболее частые элементы
print(counter.most_common(2)) # ➔ [('a', 5), ('b', 2)]
# Подсчёт слов в списке
words = ["python", "java", "python", "c++", "python", "java"]
word_counter = Counter(words)
print(word_counter) # ➔ Counter({'python': 3, 'java': 2, 'c++': 1})
Counter создаёт словарь с элементами и их количеством.most_common(n) возвращает n самых популярных элементов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥2
Модуль
logging — стандартный инструмент Python для записи логов. Он позволяет выводить сообщения разных уровней (debug, info, warning, error, critical) в консоль, файлы или другие хранилища.import logging
# Базовая конфигурация логирования
logging.basicConfig(
level=logging.DEBUG, # Минимальный уровень логов
format="%(asctime)s - %(levelname)s - %(message)s", # Формат сообщений
filename="app.log", # Логируем в файл
filemode="w" # Перезаписываем файл при каждом запуске
)
# Примеры логов разных уровней
logging.debug("Отладочное сообщение")
logging.info("Информационное сообщение")
logging.warning("Предупреждение")
logging.error("Ошибка")
logging.critical("Критическая ошибка")
basicConfig() задаёт уровень, формат и место сохранения логов.handlers. Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Перепилил рекомендации с PHP‑монолита на микросервисы с Python. Рассказываю, как разрулили хаос зависимостей, разделили зоны ответственности и получили масштабируемую систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Что произойдёт, если изменить mutable-объект, который используется как значение по умолчанию в аргументе функции?
Пример
def add_item(item, items=[]):
items.append(item)
return items
print(add_item(1)) # ➔ [1]
print(add_item(2)) # ➔ [1, 2]
print(add_item(3)) # ➔ [1, 2, 3]
Ответ
В Python значения по умолчанию вычисляются один раз при определении функции, а не при каждом её вызове.
Если это изменяемый объект (например, список или словарь), изменения будут сохраняться между вызовами функции.
✅ Как исправить: использовать None и инициализировать объект внутри функции.
python
Копировать
Редактировать
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item(1)) # ➔ [1]
print(add_item(2)) # ➔ [2]
🟢 Когда важно помнить:
— При использовании списков, словарей, множеств как аргументов по умолчанию.
— Чтобы избежать неожиданных накоплений данных между вызовами.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5
Rich — это современная библиотека для красивого и функционального вывода в терминал на Python.
🟢 Цветной и стилизованный текст (поддержка ANSI-цветов)🟢 Таблицы, прогресс-бары, markdown, дерево файлов🟢 Подсветка синтаксиса кода прямо в терминале🟢 Логирование с цветами и форматированием🟢 Поддержка эмодзи и адаптация под размеры терминала
from rich.console import Console
from rich.table import Table
console = Console()
# Цветной текст
console.print("[bold green]Успех![/bold green] [yellow]Предупреждение[/yellow]")
# Таблица
table = Table(title="Рейтинг")
table.add_column("Имя", style="cyan")
table.add_column("Очки", style="magenta")
table.add_row("Алиса", "1500")
table.add_row("Боб", "1200")
console.print(table)
pip install rich
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
В этой статье узнаем как написать CI/CD для сборки Docker-образа и деплоя проекта, а также, как получить бесплатно Portainer BE.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
Mouse Vs Python — это личный блог Майкла Драммонда, который более 10 лет публикует статьи о Python. Здесь можно найти гайды по стандартной библиотеке, обзоры полезных библиотек и советы по “питоничному” коду.
Please open Telegram to view this post
VIEW IN TELEGRAM
cycle из модуля itertools позволяет зациклить любую последовательность, повторяя её элементы бесконечно. Полезно для создания повторяющихся шаблонов, циклических счётчиков и генераторов данных.import itertools
colors = ["red", "green", "blue"]
# Бесконечно повторяем список
for i, color in zip(range(10), itertools.cycle(colors)):
print(i, color)
# ➔ 0 red
# ➔ 1 green
# ➔ 2 blue
# ➔ 3 red
# ➔ ...
itertools.cycle(iterable) создаёт итератор, который повторяет элементы без концаzip или islice, чтобы ограничить количество повторенийPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
Расскажу, как растянуть трюк с XOR до миллиардов строк: собираю обратимый фильтр Блума, ищу тысячи пропавших ID, считаю память, бьюсь с коллизиями и показываю минимальный код. Без магии
Please open Telegram to view this post
VIEW IN TELEGRAM
Модуль
json из стандартной библиотеки позволяет легко работать с JSON — популярным форматом обмена данными между сервисами и приложениями.import json
# Пример данных
data = {
"name": "Alice",
"age": 30,
"skills": ["Python", "SQL"]
}
# Запись в JSON-строку
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)
# Запись в файл
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
# Чтение из файла
with open("data.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print(loaded_data)
json.dumps() — преобразует объект Python в JSON-строку.json.dump() — записывает объект прямо в файл.json.loads() — читает JSON-строку и превращает её в объект Python.json.load() — читает JSON из файлаPlease open Telegram to view this post
VIEW IN TELEGRAM
❤6
Что произойдёт, если переопределить метод __bool__ у объекта в Python?
Пример
class Weird:
def __init__(self, value):
self.value = value
def __bool__(self):
return self.value % 2 == 0 # True, только если число чётное
obj1 = Weird(2)
obj2 = Weird(3)
print(bool(obj1)) # ➔ True
print(bool(obj2)) # ➔ False
Ответ
Метод __bool__ управляет тем, как объект ведёт себя в булевом контексте (if, while, bool()).
По умолчанию, если __bool__ не определён, Python пытается вызвать __len__: объект считается True, если его длина > 0.
Если нет ни __bool__, ни __len__, объект всегда будет True.
✅ Когда использовать:
— Для кастомных структур данных, где важно задать собственные правила "пустоты" или "валидности".
— Для удобной проверки состояния объекта (if stack: ..., if db_connection: ...).
❗️Важно: __bool__ должен возвращать именно True или False, иначе Python выбросит TypeError
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁26
Pendulum — это улучшенная альтернатива стандартному модулю datetime в Python. Она делает работу с датами и временем проще, удобнее и безопаснее.
🟢 Простое создание и парсинг дат/времени🟢 Поддержка временных зон "из коробки"🟢 Удобная работа с периодами и интервалами (разница дат)🟢 Форматирование дат в ISO 8601 и человеко-читаемый вид🟢 Совместимость с datetime
import pendulum
# Создание даты
dt = pendulum.datetime(2025, 5, 17, tz="Europe/Moscow")
print(dt) # ➔ 2025-05-17T00:00:00+03:00
# Парсинг строки
parsed = pendulum.parse("2025-08-16T14:30:00Z")
print(parsed.in_timezone("Europe/Moscow"))
# Разница дат
start = pendulum.date(2025, 1, 1)
end = pendulum.date(2025, 8, 16)
print(end.diff(start).in_days()) # ➔ 227
# Человекочитаемый формат
print(end.diff_for_humans(start)) # ➔ "7 months after"
pip install pendulum
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Прогнал домофонный архив через dlib/face_recognition на GPU: мерил скорость, собирал капризное окружение, чинил драйверы; делюсь выводами. Код на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🤯1
PyMOTW — это серия статей с практическими примерами по модулям стандартной библиотеки: от itertools, collections и functools до asyncio, pathlib и contextlib.
Материал подан в формате «что делает модуль, когда применять и какие есть подводные камни» — с короткими, рабочими примерами.
Please open Telegram to view this post
VIEW IN TELEGRAM