Модуль
sys предоставляет функцию getsizeof(), с помощью которой можно узнать, сколько байт занимает объект в памяти. Полезно при оптимизации, работе с большими структурами и оценке производительности.import sys
a = [1, 2, 3, 4, 5]
b = "Привет, мир!"
c = {i: i*i for i in range(10)}
print(sys.getsizeof(a)) # ➔ размер списка
print(sys.getsizeof(b)) # ➔ размер строки
print(sys.getsizeof(c)) # ➔ размер словаря
sys.getsizeof(obj) возвращает базовый размер объекта в байтах.pympler или asizeof из pysizerPlease open Telegram to view this post
VIEW IN TELEGRAM
👍7
argparse — встроенный модуль Python для создания понятных интерфейсов командной строки. Позволяет легко добавлять флаги и параметры к скриптам, с автоматической генерацией --help.import argparse
parser = argparse.ArgumentParser(description="Приветствие пользователя")
parser.add_argument("name", help="Имя пользователя")
args = parser.parse_args()
print(f"Привет, {args.name}!")
1.
ArgumentParser() создаёт парсер аргументов.2.
add_argument("name") добавляет обязательный позиционный аргумент.3.
parse_args() читает аргументы из командной строки.4. Запуск:
python script.py Алиса ➔ Привет, Алиса!🟢 Поддерживает позиционные и опциональные аргументы (--debug, --limit 10)🟢 Генерирует справку по команде -h или --help🟢 Полезен при создании CLI-утилит, автоматизации и упаковке Python-скриптов в команды
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Рассказываю, как мы автоматизируем рутину с ИИ, но не рискуем слить конфиденциальный договор в открытый чат. Делюсь кейсом с юристами, ботами и безопасной проверкой сложных документов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1
Чем отличается
isinstance() от type() при проверке типов в Python?Пример
class Animal: pass
class Dog(Animal): pass
dog = Dog()
print(type(dog) == Dog) # ➔ True
print(isinstance(dog, Dog)) # ➔ True
print(isinstance(dog, Animal)) # ➔ True
print(type(dog) == Animal) # ➔ False
Ответ
Функция type() проверяет точный тип объекта, без учёта наследования. А isinstance() проверяет, является ли объект экземпляром указанного класса или его подклассов.
🟢 type(obj) == SomeClass — строгая проверка, используется, когда нужно исключить наследников.
🟢 isinstance(obj, SomeClass) — гибкая проверка, чаще применяется в реальном коде.
✅ Когда использовать isinstance():
— При работе с классами и их наследниками
— Когда нужно поддерживать полиморфизм
❗️ type() полезен при проверке встроенных типов (int, list, dict) — если точно знаешь, что ищешь, и не хочешь ловить наследников.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👏1
deal — это библиотека контрактного программирования для Python: она позволяет описывать пред- и постусловия, инварианты, исключения и побочные эффекты прямо в коде с помощью декораторов.Полезна при написании надёжных библиотек, бизнес-логики и сложных алгоритмов, где важно явно зафиксировать ожидания от функций.
import deal
@deal.pre(lambda x: x >= 0)
@deal.post(lambda result: result >= 0)
@deal.raises(ZeroDivisionError)
def safe_sqrt(x):
return x ** 0.5
print(safe_sqrt(9)) # 3.0
print(safe_sqrt(-1)) # deal.PreContractError
pip install deal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Пилил версию NoDPI под Android на Python и Kivy, потому что Java — зло. Рассказываю, как заставил YouTube снова работать нормально, и как РКН опять может психануть. Будет весело.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2
Hyperskill предлагает обучение через реальные проекты, встроенные прямо в IDE (например, PyCharm), с автоматической проверкой и этапами прогресса.
Подходит как для новичков, так и для продвинутых, кто хочет учиться, создавая полноценные приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Модуль
bisect из стандартной библиотеки Python позволяет эффективно работать с отсортированными списками: выполнять бинарный поиск и вставку, сохраняя порядок.import bisect
numbers = [1, 3, 4, 7, 9]
# Найти позицию для вставки числа 5
pos = bisect.bisect(numbers, 5)
print(pos) # ➔ 3
# Вставить число в правильное место
bisect.insort(numbers, 5)
print(numbers) # ➔ [1, 3, 4, 5, 7, 9]
bisect() возвращает индекс, куда можно вставить элемент, сохраняя порядокinsort() сразу вставляет элемент в нужную позициюPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3
Сервер обеспечивает удалённое управление устройствами, подключёнными по WebSocket. На этапе тестирования к нему также подключено веб-приложение, через которое пользователь может управлять устройствами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
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