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

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

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的参数数量的情况下实现这一目标?

最佳答案 你不能用类型提示做你想做的事.没有语法来捕获TypeVar泛型中的参数部分.

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

你所拥有的是目前可以实现的最好成就.

点赞