tempfile — встроенный модуль Python для безопасного создания временных файлов и директорий. Полезен для тестов, кэширования, временных логов и работы с внешними инструментами.import tempfile
# Создаём временный файл
with tempfile.NamedTemporaryFile(mode='w+', delete=False) as tmp:
tmp.write("Временные данные")
tmp.seek(0)
print(tmp.read()) # ➔ Временные данные
print(f"Файл сохранён как: {tmp.name}")
1.
NamedTemporaryFile() создаёт файл, который можно использовать как обычный файл.2.
mode='w+' означает чтение и запись.3.
delete=False — файл сохраняется после закрытия (иначе удаляется автоматически).4. Можно использовать временные директории с
tempfile.TemporaryDirectory().🟢 Безопасное имя файла (не будет конфликтов)🟢 Поддержка кроссплатформенности (работает и на Windows, и на Linux)🟢 Удобно для промежуточных данных, которые не нужно сохранять надолго
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Что делает декоратор
@property в Python и зачем он нужен?Пример
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def diameter(self):
return self._radius * 2
c = Circle(5)
print(c.diameter) # ➔ 10
c.diameter = 12 # ➔ AttributeError: can't set attribute
Ответ
@property превращает метод класса в атрибут, доступный для чтения как обычное поле. Это позволяет скрыть логику за простым синтаксисом без скобок и позволяет использовать геттеры, сеттеры и делетеры, как в других ООП-языках.
🟢 Преимущества@property :
Позволяет изменить внутреннюю реализацию без изменения интерфейса.
Используется для контроля доступа к данным (валидация, вычисления "на лету").
Улучшает читаемость и делает API объекта более естественным.
✅ Когда использовать:
Когда нужно вычислить значение на основе внутренних данных.
Когда требуется защитить атрибут от прямой перезаписи.
При написании библиотек и API для других разработчиков.
❗️ Для создания сеттера — используйте @<property_name>.setter. Без него — свойство только для чтения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Auditd фиксирует всё, от sudo до rm -rf. Добавим Python-скрипт — получим читаемые отчёты, алерты и соответствие требованиям ИБ. Установка, настройка, практические примеры.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Pydantic — это мощная библиотека для проверки данных и управления конфигурацией с помощью аннотаций типов.
Она позволяет создавать надёжные модели данных, автоматически валидируя входные значения и преобразуя их в нужный формат.
from pydantic import BaseModel, validator
class User(BaseModel):
id: int
name: str
email: str
@validator("email")
def email_must_contain_at(cls, v):
if "@" not in v:
raise ValueError("Invalid email address")
return v
user = User(id="1", name="Alice", email="alice@example.com")
print(user.dict())
pip install pydantic
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3
PyBites предлагает формат "Python bites" — маленькие, но нетривиальные задачи, которые развивают не только синтаксис, но и стиль, идиомы и архитектурное мышление.
Подходит для тех, кто уже знаком с основами и хочет стать питонистее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Сравнение PyBind11 и ctypes: когда нужна простота и совместимость типов — выбираем PyBind11, для низкоуровневого доступа — ctypes. Как подключать C++ к Python без жертв в интерактивности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Модуль
heapq из стандартной библиотеки позволяет использовать список как двоичную минимальную кучу (heap). Это идеальный инструмент для реализации приоритетных очередей и поиска наименьших элементов.import heapq
nums = [7, 1, 4, 9, 2]
# Превращаем список в кучу
heapq.heapify(nums)
print(nums) # ➔ [1, 2, 4, 9, 7] (куча, не просто отсортированный список)
# Извлекаем минимальный элемент
min_item = heapq.heappop(nums)
print(min_item) # ➔ 1
# Добавляем элемент с сохранением свойств кучи
heapq.heappush(nums, 3)
print(nums) # ➔ [2, 3, 4, 9, 7]
heapify() превращает список в структуру данных "куча" за O(n).heappop() извлекает минимальный элемент за O(log n).heappush() вставляет новый элемент, сохраняя свойства кучи.Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Модуль uuid из стандартной библиотеки Python позволяет создавать уникальные идентификаторы, которые можно использовать в базах данных, логах, конфигурациях и любых случаях, где важна уникальность.
import uuid
# UUID на основе времени (версия 1)
print(uuid.uuid1()) # ➔ 8f14e45f-ea6e-11ec-8fea-0242ac120002
# UUID на основе MD5-хеша (версия 3)
print(uuid.uuid3(uuid.NAMESPACE_DNS, "example.com"))
# Случайный UUID (версия 4)
print(uuid.uuid4())
# UUID на основе SHA-1 (версия 5)
print(uuid.uuid5(uuid.NAMESPACE_DNS, "example.com"))
1.
uuid.uuid1() — использует MAC-адрес и время (можно отслеживать источник).2.
uuid.uuid3() и uuid.uuid5() — хешируют строку с неймспейсом.3.
uuid.uuid4() — полностью случайный UUID, безопасный для большинства применений🟢 Используется при генерации ключей, ссылок, сессий.🟢 Все UUID соответствуют стандарту RFC 4122.🟢 Можно использовать как строку или как байты (.hex, .int, .bytes).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Рассказываю, как теперь можно запускать несколько интерпретаторов в одном Python-процессе с отдельным GIL. Плюсы, детали реализации и зачем это вообще всё нужно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
В чём разница между shallow copy и deep copy в Python?
Пример
import copy
original = [[1, 2], [3, 4]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)
original[0][0] = 99
print(shallow) # ➔ [[99, 2], [3, 4]]
print(deep) # ➔ [[1, 2], [3, 4]]
Ответ
copy.copy() создаёт поверхностную копию объекта. Это значит, что сам объект копируется, но вложенные объекты продолжают ссылаться на те же данные.
copy.deepcopy() создаёт глубокую копию: копирует и сам объект, и все вложенные объекты, рекурсивно. В результате оригинал и копия полностью независимы.
🟢 Когда использовать:
copy() — если объект неглубокий и вложенные данные не будут изменяться.
deepcopy() — если нужно полностью изолировать копию от оригинала, включая всё содержимое.
❗️Важно: deepcopy может быть медленным на больших и вложенных структурах. Используйте осознанно.
📌 Подходит для работы со сложными структурами данных: списками списков, словарями, графами и т.д.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
DeepDiff — это мощная библиотека для поиска различий между любыми Python-объектами: словарями, списками, наборами, вложенными структурами.
🟢 Поиск различий между структурами любой глубины🟢 Поддержка сравнения списков, словарей, множеств, объектов🟢 Выдаёт точные пути до отличий (например: root['user'][0]['name'])🟢 Форматы для сериализации (JSON) и "патчи" для применения изменений
from deepdiff import DeepDiff
a = {"name": "Alice", "age": 30, "skills": ["Python", "SQL"]}
b = {"name": "Alice", "age": 31, "skills": ["Python", "Go"]}
diff = DeepDiff(a, b)
print(diff)
Вывод:
{'values_changed': {
"root['age']": {'new_value': 31, 'old_value': 30},
"root['skills'][1]": {'new_value': 'Go', 'old_value': 'SQL'}
}}
pip install deepdiff
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Сделала автоматизацию: письма парсим, тему сверяем с Excel, логика — по листам. Всё локально и на n8n — чтоб заказчику не мучиться. Один логин в терминале, и всё крутится.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Python Morsels — это платформа, на которой каждую неделю присылаются небольшие, но глубокие задачи по Python.
Основной акцент — не просто на синтаксис, а на идиоматичный код, использование стандартной библиотеки и продвинутые концепции.
Please open Telegram to view this post
VIEW IN TELEGRAM
deque (двусторонняя очередь) из модуля collections — это более эффективная альтернатива спискам, когда часто требуется вставка или удаление с начала и конца.from collections import deque
# Создаём deque
queue = deque(["Алиса", "Боб", "Чарли"])
# Добавляем в конец и в начало
queue.append("Дэвид")
queue.appendleft("Эва")
print(queue) # ➔ deque(['Эва', 'Алиса', 'Боб', 'Чарли', 'Дэвид'])
# Удаляем с конца и начала
queue.pop() # ➔ 'Дэвид'
queue.popleft() # ➔ 'Эва'
print(queue) # ➔ deque(['Алиса', 'Боб', 'Чарли'])
deque оптимизирован для операций .append(), .appendleft(), .pop() и .popleft() — все выполняются за O(1), в отличие от обычного списка.maxlen=N) — полезно для реализации кольцевых буферов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Рассказываю, как кеширование в Django Ninja помогает выдерживать рост нагрузки без боли и апгрейда железа. Один и тот же ответ — не значит один и тот же расчёт.
Please open Telegram to view this post
VIEW IN TELEGRAM
Контекстные менеджеры — мощный механизм Python для безопасного и автоматического управления ресурсами: файлами, сетевыми соединениями, блокировками и т.д.
# Классический with для работы с файлами
with open("example.txt", "w") as f:
f.write("Hello, world!")
# Свой контекстный менеджер через декоратор
from contextlib import contextmanager
@contextmanager
def custom_context():
print("Вход в контекст")
yield
print("Выход из контекста")
with custom_context():
print("Работаем внутри")
# Класс-контекст для измерения времени
class Timer:
def __enter__(self):
from time import perf_counter
self.start = perf_counter()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
from time import perf_counter
print(f"Заняло времени: {perf_counter() - self.start:.4f} секунд")
with Timer():
sum(i * i for i in range(10_000_000))
with гарантирует вызов __enter__ при входе и __exit__ при выходеcontextlib.contextmanager — простой способ обернуть логику до и после yieldPlease open Telegram to view this post
VIEW IN TELEGRAM
👍9