正如 @jonrsharpe 在评论中指出的那样,这可以通过
typing.Callable
: 来完成
from typing import Callable
def my_function(func: Callable):
注意:
Callable
本身等同于 Callable[..., Any]
。
这样的 Callable
接受 any 数量和类型的参数 (...
) 并返回 any 类型 (Any
) 的值。如果这太不受约束,还可以指定输入参数列表的类型和返回类型。
例如,给定:
def sum(a: int, b: int) -> int: return a+b
对应的注释是:
Callable[[int, int], int]
也就是说,参数在外部订阅中下标,返回类型作为外部订阅中的第二个元素。一般来说:
Callable[[ParamType1, ParamType2, ..., ParamTypeN], ReturnType]
另一个值得注意的有趣点是,您可以使用内置函数
type()
来获取内置函数的类型并使用它。
所以你可以拥有
def f(my_function: type(abs)) -> int:
return my_function(100)
或者类似的东西
我想要此功能的具体用例是在 PyCharm 中启用丰富的代码完成。使用
Callable
不会导致 PyCharm 表明该对象具有 .__code__
属性,这正是我想要的,在本例中。
我偶然发现了
types
模块并且..
from types import FunctionType
允许我用
FunctionType
注释对象,瞧,PyCharm 现在建议我的对象具有 .__code__
属性。
OP 不清楚为什么这种类型提示对他们有用。 Callable 当然适用于任何实现
.__call__()
的东西,但为了进一步澄清接口,我提交了 types
模块。
令人遗憾的是 Python 需要两个非常相似的模块。