如何在Python 3.6中对高阶函数进行类型提示?

3
在以下代码中:
def b(i: int) -> int:
    return i

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

print(a(1, b))

我们如何为 a 的参数 b: ? 添加类型提示?谢谢。
1个回答

12

使用typing.Callable泛型来指示你期望一个接受单个整数参数并返回一个整数的函数:

from typing import Callable

def a(i: int, b: Callable[[int], int]) -> int:
    return i + b(i)

Callable[...]需要两个参数,第一个参数是参数类型的列表,第二个参数是返回类型。


如果参数是可选的呢? - CervEd
1
@CervEd Callable 很原始。使用 Protocol 子类和一个带有 __call__ 方法的函数来模拟具有更复杂签名(如关键字参数)的函数。 - Martijn Pieters
1
还可以查看mypy关于回调协议的文档 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接