python3输入:从Callable中提取参数列表

时间:2017-05-25 16:58:29

标签: python python-3.x type-hinting

考虑一个包装另一个函数并将输出放入单例列表的函数:

def listify(func):
    return lambda *kargs, **kwargs: [func(*kargs, **kwargs)]

你如何在python3中输入提示这个函数?这是我最好的尝试:

from typing import Callable, TypeVar
T = TypeVar('T')

def listify(func: Callable[..., T]) -> Callable[..., List[T]]:
    return lambda *kargs, **kwargs: [func(*kargs, **kwargs)]

但我不满意返回的Callable不会继承输入Callable的参数类型的签名。有没有办法在不对func

的参数数量做出假设的情况下实现这一目标

1 个答案:

答案 0 :(得分:1)

你不能通过类型提示做你想做的事。没有语法来捕获TypeVar泛型中的参数部分。

Callable最初保持简单,因为它实际上只是表示回调函数。更改是a-foot,但是only to specify specific arguments,并且没有替换第一个参数的选项(类型检查器只接受列表显示或...)。有open proposal to introduce an ArgumentsVar object来呈现特定签名但尚未实现。

你所拥有的是目前可以实现的最佳目标。