繁体   English   中英

如何使用可调用参数和默认值键入提示函数

[英]How to type hint function with a callable argument and default value

我试图输入一个函数的参数,该函数需要一个可调用的,并且有一个默认参数(在下面的示例set

from typing import Callable, List
T = TypeVar("T")
def transform(data: List[int], ret_type: Callable[[List[int]], T] = set) -> T:
    return ret_type(data)

a = [1, 2, 3]
my_set: Set = transform(a)

上面的代码从 mypy mypy3: Incompatible default for argument "ret_type" (default has type "Type[Set[Any]]", argument has type "Callable[[List[int]], T]")

ret_type的正确类型应该是什么?

编辑

下面的代码虽然不理想,但效果很好(cf @chepner 评论)

from typing import cast, Any, Callable, TypeVar

T = TypeVar("T")

def transform(data: Any, ret_type: Callable[..., T] = cast(Callable, set)) -> T:
    return ret_type(data)

您可以使用@overload为您的案例使用默认参数正确键入函数提示:

from typing import Callable, List, TypeVar, overload, Set

T = TypeVar("T")

@overload
def transform(data: List[int]) -> Set[int]: ...

@overload
def transform(data: List[int], ret_type: Callable[[List[int]], T]) -> T: ...
    
# untyped implementation
def transform(data, ret_type = set):
    return ret_type(data)

a = [1, 2, 3]
my_set: Set = transform(a)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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