[英]python3 typing: extract argument list from Callable
考虑一个 function 包装另一个 function 并将 output 放入 singleton 列表中:
def listify(func):
return lambda *kargs, **kwargs: [func(*kargs, **kwargs)]
你会如何在 python3 中输入这个 function? 这是我最好的尝试:
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
的 arguments 的数量的情况下实现这一目标?
您不能使用类型提示来做您想做的事情。 没有语法可以捕获TypeVar
泛型中的arguments部分。
Callable
最初保持简单,因为它实际上仅表示回调函数。 更改是在脚上,但仅用于指定特定参数 ,并且没有选项来替换第一个参数(类型检查器仅接受列表显示或...
)。 有一个开放的提案,建议引入ArgumentsVar
对象以呈现特定的签名,但尚无实现。
您拥有的是目前可以实现的最好的。
PEP 612将ParamSpec
添加到 python-3.10,它允许:
from typing import Callable, ParamSpec, TypeVar
P = ParamSpec('P')
T = TypeVar('T')
def listify(func: Callable[P, T]) -> Callable[P, List[T]]:
return lambda *kargs, **kwargs: [func(*kargs, **kwargs)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.