Я экспериментирую с аннотациями типов в Python. Большинство случаев довольно ясны, за исключением тех функций, которые принимают другую функцию в качестве параметра.
Рассмотрим следующий пример:
from __future__ import annotations
def func_a(p:int) -> int:
return p*5
def func_b(func) -> int: # How annotate this?
return func(3)
if __name__ == "__main__":
print(func_b(func_a))
На выходе просто печатается 15
.
Как аннотировать параметр func
в func_b( )
?
ОТВЕТ
Спасибо @Alex за ответ. Модуль typing
предлагает аннотацию Callable
(см .: python docs ). Для моего примера это дает:
from __future__ import annotations
from typing import Callable
def func_a(p:int) -> int:
return p*5
def func_b(func: Callable[[int], int]) -> int:
return func(3)
if __name__ == "__main__":
print(func_b(func_a))
Как видите, аннотация Callable
также аннотируется сама по следующей схеме:
Callable[[Arg1Type, Arg2Type], ReturnType]