Как я могу указать тип функции в моих подсказках типа?

Я хочу использовать подсказки типа в моем текущем проекте Python 3.5. Моя функция должна получить функцию в качестве параметра.

Как я могу указать функцию типа в моих подсказках типа?

import typing

def my_function(name:typing.AnyStr, func: typing.Function) -> None:
    # However, typing.Function does not exist.
    # How can I specify the type function for the parameter `func`?

    # do some processing
    pass

Я проверилПКП 483, но не смог найти подсказку типа функции там.

 user70765015 июн. 2016 г., 14:18
python.org/dev/peps/pep-0483/#fundamental-building-blocks, последний пункт перед "мы могли бы добавить".
 jonrsharpe15 июн. 2016 г., 14:17
ФункцияCallable

Ответы на вопрос(2)

Еще один интересный момент, который стоит отметить, это то, что вы можете использовать встроенную функциюtype() чтобы получить тип встроенной функции и использовать его. Так что вы могли бы иметь

def f(my_function: type(abs)) -> int:
    return my_function(100)

Или что-то в этой форме

 Guido van Rossum16 июл. 2018 г., 23:29
Это на самом деле не работает в Mypy.

Как@jonrsharpe отметил в комментарии, это может быть сделано сtyping.Callable:

from typing import AnyStr, Callable

def my_function(name: AnyStr, func: Callable) -> None:

Проблема есть,Callable сам по себе переводится наCallable[..., Any] что значит:

Вызываемый беретлюбое количество / тип аргументы и возвращает значение любого типа. В большинстве случаев это не то, что вам нужно, так как вы можете пропустить практически любую функцию. Вы хотите, чтобы параметры функции и типы возвращаемых данных были также подсказаны.

Вот почему многиеtypes вtyping были перегружены для поддержки вложенных сценариев, которые обозначают эти дополнительные типы. Так что, если, например, у вас была функцияsum это занимает дваintс и возвращаетint:

def sum(a: int, b: int) -> int: return a+b

Ваша аннотация для этого будет:

Callable[[int, int], int]

то есть параметры подпрограммы во внешней подписке с типом возврата в качестве второго элемента во внешней подписке. В общем:

Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
 javadba20 мая 2019 г., 05:04
этотtyping материал перемещает весь язык Python на ступеньку выше.

Ваш ответ на вопрос