Python 3.5+Аннотации и typingпонятие
Callable[[arg], ret]
callable
Аннотация для callable-объектов. Callable[[A1, A2], R] — принимает A1, A2, возвращает R. Callable[..., R] — любые аргументы.
Синтаксис
from typing import Callable
Callable[[ArgType, ...], ReturnType]
Внутренние скобки — это список типов аргументов, причём только позиционных: именованные параметры, значения по умолчанию и *args через Callable описать нельзя, для этого нужен Protocol с методом __call__. Многоточие в Callable[..., R] означает «аргументы любые», а не «без аргументов» — пустой список аргументов записывается двумя пустыми скобками. С Python 3.9 typing.Callable считается устаревшим: в новом коде берут collections.abc.Callable.
Примеры
from typing import Callable
def apply(f: Callable[[int], int], x: int) -> int:
return f(x)
print(apply(lambda x: x * 2, 5)) # → 10
from typing import Callable
def run(cb: Callable[[], None]) -> None:
cb()
run(lambda: print('called')) # → called
from typing import Callable
def transform(data: list, fn: Callable[[int], int]) -> list:
return [fn(x) for x in data]
print(transform([1, 2, 3], lambda x: x ** 2)) # → [1, 4, 9]
print(callable(print)) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности