【发布时间】:2018-11-07 07:01:20
【问题描述】:
假设我有一个函数,它接受一个值和任意数量的函数,让我们调用该函数为 chain_call。
如果没有类型,一个简单的幼稚实现将是:
def chain_call(input_value, *args):
for function in args:
input_value = function(input_value)
return input_value
正如您想象的那样,input_value 可以是任何东西,但它始终与*args: List[Callable] 中第一个Callable 的第一个也是唯一一个必需的参数相同。
从这里开始,Callable 的第一个也是唯一需要的参数的类型与前面的项返回类型相同。
到目前为止,我已经设法定义了一个非常通用的类型,但它太松散了。
def chain_call(input_value: Any, *args: List[Callable[Any], Any]) -> Any: ...
我真正想要的是类似的东西
T = TypeVar('T')
def chain_call(input_value: T, *args: List[Callable[T, ...], tr]) -> tr: ...
其中T 的Callable n+1 是tr 的Callable n,最终的返回类型是Callable n_max 的tr。我不确定如何用类型系统表达这一点,希望得到任何指导。
【问题讨论】:
-
我认为这在当前的
typing系统中是不可能的。在 github 站点上发布功能请求。 (mypy和/或typing)
标签: python python-3.x types type-hinting higher-kinded-types