← Назад к вопросам

Что такое куча (Heap) в Python?

2.0 Middle🔥 81 комментариев
#Python Core#Soft Skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое контракт при взаимодействии модулей в Python

Контракт (Contract) — это явное соглашение между модулями о том, какие функции один модуль предоставляет другому, какие параметры принимает и что возвращает. Это гарантирует предсказуемое взаимодействие.

Основная идея

# Модуль A — контракт: функция принимает список и возвращает число
def sum_numbers(numbers: list[int]) -> int:
    '''Суммирует все числа в списке.
    
    Args:
        numbers: Список целых чисел
    
    Returns:
        Сумма всех чисел
    '''
    return sum(numbers)

# Модуль B — использует контракт
result = sum_numbers([1, 2, 3])  # Знаем, что получим число обратно

Типизация как контракт

from typing import List, Dict, Optional

def get_user_by_id(user_id: int) -> Optional[Dict[str, str]]:
    '''Контракт: принимает int, возвращает Dict или None'''
    # реализация...

def process_orders(orders: List[Dict]) -> int:
    '''Контракт: принимает список диктов, возвращает int'''
    # реализация...

Документирование контракта

class UserRepository:
    def save(self, user: User) -> User:
        '''Сохраняет пользователя.
        
        Args:
            user: Объект User без ID
        
        Returns:
            User с установленным ID из БД
        
        Raises:
            ValidationError: Если user некорректен
            DatabaseError: Если ошибка БД
        '''
        # реализация...

Нарушение контракта

# Плохо — функция нарушает контракт
def calculate_total(prices: list[float]) -> float:
    '''Контракт: возвращает число'''
    # Но может вернуть None!
    if not prices:
        return None
    return sum(prices)

# Вызывающий код сломается
total = calculate_total([])
print(total + 10)  # TypeError: unsupported operand type(s)

Интерфейсы как контракт

from abc import ABC, abstractmethod

class PaymentProcessor(ABC):
    '''Контракт для обработки платежей'''
    
    @abstractmethod
    def process(self, amount: float) -> bool:
        '''Должна вернуть True/False'''
        pass

class StripeProcessor(PaymentProcessor):
    def process(self, amount: float) -> bool:
        # Реализация
        pass

class PayPalProcessor(PaymentProcessor):
    def process(self, amount: float) -> bool:
        # Реализация
        pass

Контракт — это соглашение, которое делает модули независимыми и предсказуемыми.

Что такое куча (Heap) в Python? | PrepBro