我正在尝试在 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]

最佳答案

您可以将 typing 模块用于 Callable 注释。
Callable 注释提供了一个参数类型列表和一个返回类型:

from typing import Callable

def func_b(func: Callable[[int], int]) -> int:
    return func(3)

关于 python 3 : How annotate a function that takes another function as parameter?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53227628/

10-12 23:04