Sobes.tech
Назад к вопросам
Junior — Middle
62

Где лучше всего импортировать тип Callable в Python 3.10 для повышения читаемости и стандартности кода?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Callable лучше импортировать из модуля typing, если нужна совместимость с кодом, который ориентирован на привычный стиль аннотаций. В Python 3.10 также нормально использовать collections.abc.Callable для стандартных типов из коллекций, и это часто предпочтительнее для читаемости и более современного стиля. Главное — придерживаться одного подхода в проекте.

Определение:

Callable — это тип-аннотация для объектов, которые можно вызвать как функцию: обычных функций, методов, лямбд, а также объектов с методом __call__. Он используется в сигнатурах, чтобы явно указать, какие аргументы ожидаются у вызываемого объекта и что он возвращает.

Пример использования:

from collections.abc import Callable

def apply_operation(
    x: int,
    y: int,
    operation: Callable[[int, int], int],
) -> int:
    return operation(x, y)


def add(a: int, b: int) -> int:
    return a + b


result = apply_operation(2, 3, add)
print(result)  # 5

Пояснение кода:

В этом примере operation — это любой вызываемый объект, который принимает два int и возвращает int.
Функция add подходит под эту аннотацию, поэтому ее можно передать в apply_operation.
Такой подход делает контракт функции понятным и упрощает чтение кода.

Ключевые моменты:

  • Для Python 3.10 Callable можно импортировать из collections.abc, если нужен современный и понятный стиль.
  • typing.Callable тоже встречается часто, особенно в коде с более старым стилем аннотаций.
  • Callable[[A, B], R] описывает функцию, которая принимает аргументы типов A, B и возвращает R.
  • Если нужно обозначить просто “любой вызываемый объект”, Callable — подходящий инструмент.
  • Важно не смешивать стили без необходимости: в проекте лучше выбрать один источник импорта и придерживаться его.