Может использоваться как тип в аннотациях с помощью синтаксиса []
.
# с версии Python 3.9. импорт из typing устарел from typing import Callable # используйте импорт из `collections.abc` from collections.abc import Callable Callable[[x], Y]
x
- список аргументов функции,Y
- тип возвращаемого значения.Тип аннотации Callable
модуля typing
применяется для типизации функций обратного вызова, для объектов, которые их ожидают.
Запись Callable[[int], str]
является функцией от (int) -> str
. Синтаксис аннотации всегда должен использоваться ровно с двумя значениями: список аргументов и тип возвращаемого значения. Список аргументов должен быть списком типов или многоточием, возвращаемый тип должен быть одного типа.
Не существует синтаксиса для указания необязательных аргументов или ключевых аргументов. Такие типы функций редко используются как типы обратного вызова.
Форма записи как Callable[..., ReturnType]
(буквальное многоточие) может использоваться в качестве подсказки для вызываемого объекта, принимающего любое количество аргументов и возвращающего ReturnType
. Обычный Callable
эквивалентен Callable[..., Any]
, а такая запись, свою очередь, эквивалентна встроенному абстрактному классу collections.abc.Callable
.
Вызываемые объекты, которые принимают другие вызываемые объекты в качестве аргументов, могут указывать на то, что их типы параметров зависят друг от друга с помощью typing.ParamSpec
. Кроме того, если этот вызываемый объект добавляет или удаляет аргументы из других вызываемых объектов, может использоваться оператор typing.Concatenate
. Они принимают форму Callable[ParamSpecVariable, ReturnType]
и Callable[Concatenate [Arg1Type, Arg2Type, ..., ParamSpecVariable], ReturnType]
соответственно.
Не рекомендуется к применению с Python 3.9: встроенный абстрактный базовый класс collections.abc.Callable
теперь поддерживает синтаксис []
.
Дополнительно смотрите встроенный в Python "Тип псевдоним".
Изменено в версии 3.10: Callable
теперь поддерживает typing.ParamSpec
и typing.Concatenate
.
from collections.abc import Callable def feeder(get_next_item: Callable[[], str]) -> None: # тело функции def async_query(on_success: Callable[[int], None], on_error: Callable[[int, Exception], None]) -> None: # тело функции