Введите подсказку встроенной карты, чтобы предоставить параллельные альтернативыPython

Программы на Python
Anonymous
Введите подсказку встроенной карты, чтобы предоставить параллельные альтернативы

Сообщение Anonymous »

Я пытаюсь определить альтернативу встроенной функции карты в Python для обеспечения многопоточности и многопроцессорности карт. Вот протокол, который я определил на основе сигнатуры встроенной карты:

Код: Выделить всё

class Map(Protocol):
def __call__(
self, func: Callable[..., T], *iterables: Iterable[Any]
) -> Iterable[T]:
...
Однако, когда я просто хочу использовать встроенную карту, я получаю ошибку подсказки во время компиляции:

Код: Выделить всё

def some_function(mapper: Map=map):
pass
Выдает следующее предупреждение:
Выражение типа «type[map[Unknown]]» не может быть присвоено параметру типа «Map».
Ни одна перегруженная функция не соответствует введите "(func: (...) -> T@call, *iterables: Iterable[Any]) -> Iterable[T@call]"
Код работает нормально, но я также хочу, чтобы подсказки типов были правильными. как мне это исправить?
Я пытался заставить это работать и наоборот:

Код: Выделить всё

def some_function(mapper: type[map]=map): # totally fine :)
pass

# MultiProcessingMap is an instance that conforms to the Map protocol
some_function(mapper=MultiProcessingMap(5)) # compile time error, runtime fine
Аргумент типа «MultiProcessingMap» нельзя присвоить параметру «сопоставитель» типа «type[map[Unknown]]» в функции «some_function»
Тип «MultiProcessingMap» не может быть присвоен типу "type[map[Unknown]]"
Бонусный вопрос: как можно расширить подсказку типа Map, чтобы она также охватывала типы аргументов func ?

Подробнее здесь: https://stackoverflow.com/questions/776 ... ternatives

Вернуться в «Python»