繁体   English   中英

python3 类型:从 Callable 中提取参数列表

[英]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 612ParamSpec添加到 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM