Python 3: Как аннотировать функцию, которая принимает другую функцию в качестве параметра? - PullRequest
0 голосов
/ 09 ноября 2018

Я экспериментирую с аннотациями типов в 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]

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете использовать модуль typing для аннотаций Callable.

Аннотация Callable содержит список типов аргументов и возвращаемый тип:

from typing import Callable

def func_b(func: Callable[[int], int]) -> int:
    return func(3)
0 голосов
/ 09 ноября 2018

Разве это не должно быть просто function?

>>> type(func_a)
function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...